Скрытие окна консоли в системном вызове - PullRequest
0 голосов
/ 02 июня 2010

Продолжая с этот вопрос

При каждом системном вызове функция создает набор параметров и отправляет их в другую программу, основанную только на консоли. Есть ли способ сделать так, чтобы при каждом вызове не появлялось окно консоли?

Я выполнил поиск, но те, которые не являются проблемой компоновщика, просто не работают для меня. Например, я пробовал вызовы _execl и System::Diagnostics::Process^ myProcess = gcnew System::Diagnostics::Process;, но они не работают.

_execl откроет окно консоли, прокрутит кучу вещей (из программы, которую я назвал, я думаю), затем закроет мое приложение и даже не сделает то, что должно было сделать. System::Diagnostics::Process^ myProcess = gcnew System::Diagnostics::Process;, похоже, тоже не выполняет то, что я хочу, потому что выходная папка, которая должна содержать файлы, ничего не содержит.

Так что я открыт для идей.

1 Ответ

1 голос
/ 03 июня 2010

API CreateProcess предоставляет вам необходимый контроль. Например:

#include <windows.h>

using namespace System;

int main(array<System::String ^> ^args)
{
    STARTUPINFO         si;
    PROCESS_INFORMATION pi;
    TCHAR               cmdLine[MAX_PATH] = L"myOtherApp.exe -with -some -args";

    ::ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);

    ::CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

    Console::ReadLine();
    return 0;
}

Если флаги CreateProcess установлены в 0, как указано выше, вторичное приложение не открывает свое собственное окно консоли и записывает свои выходные данные в окно родителя. Чтобы полностью отключить вторичное приложение, посмотрите на другие CreateProcess флаги, например, CREATE_NO_WINDOW.

...