Как скрыть консоль cmd.exe? - PullRequest
0 голосов
/ 30 апреля 2010

Я поместил этот код ниже в мою * .dll для Internet Explorer.

FILE  *child = _popen("java -jar c:\\simmetrics.jar c:\\chtml.txt c:\\thtml.txt > c:\\output.txt", "r");

fclose(child);

Моя проблема в том, что при запуске Internet Explorer будет открыта консоль cmd.exe.Я не хочу, чтобы консоль внезапно появлялась при запуске браузера.Как я могу избежать этого или скрыть это или не выполнять это вообще)?

обновление:

Как правильно вызвать javaw из кода?Он по-прежнему всплывает в консоли: (

FILE  *child = _popen("javaw -jar c:\\simmetrics.jar c:\\chtml.txt c:\\thtml.txt > c:\\output.txt", "r");

update:

Есть ли другой способ? Окно консоли по-прежнему вызывается каждый раз, когда я запускаю эту строку кода внутри своей программы.

Ответы [ 3 ]

4 голосов
/ 30 апреля 2010

Попробуйте использовать javaw.exe вместо этого. Это то же самое, что и java.exe, за исключением того, что это графическая программа Windows, а не консольная программа, поэтому она не открывает командную консоль. (В качестве побочного эффекта вы не сможете увидеть stdout и stderr, не перенаправив их в файл журнала.)

2 голосов
/ 06 мая 2010

Вы можете использовать CreateProcess вместо _popen. Это немного громоздко, но вы можете передать флаг CREATE_NO_WINDOW как часть параметра dwCreationFlags, чтобы предотвратить появление окна консоли.

Если вам нужно захватить выходные данные процесса, который вы создали, вы можете использовать CreatePipe / ReadFile для этого. MSDN имеет полный пример этого здесь .

0 голосов
/ 19 июня 2017

Как указал другой ответ, мы можем использовать функцию CreateProcess с флагом CREATE_NO_WINDOW. Вот рабочий пример этого. Это имеет много дополнительной мощности, не показанной здесь. Это как минимум тот минимум, который вам необходим для замены system () или семейства _spawn ().

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

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...