Как выполнить оболочку программы и получить ее в C ++ без всплывающего окна cmd - PullRequest
1 голос
/ 24 мая 2011

Я использую функцию win32 процесса создания, чтобы запустить приложение оболочки Windows, например Ipconfig и получить его вывод, но без всплывающих окон cmd.
Также я пытаюсь использовать библиотеку POCO и ее класс процесса, но каждый раз всплывающее окно cmd.

Кто-нибудь знает, как это сделать с библиотекой POCO, а на форумах POCO поддержки нет?

Ответы [ 3 ]

3 голосов
/ 24 мая 2011

Чтобы скрыть окно, попробуйте передать SH_HIDE при вызове CreateProcess для lpStartupInfo.

STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;    
CreateProcess(/*...*/, &si /*...*/);

Если вы хотите собрать результаты, вы можете вызвать CreateFile для получения дескриптора файла и передать дескриптор в STARTUPINFOструктуру, затем прочитайте ее, когда CreateProcess вернет:

STARTUPINFO si = {0};
si.cb = sizeof(si);
si.hStdOutput = hOutput;
si.hStdError = (HANDLE) STD_ERROR_HANDLE;
si.hStdInput = (HANDLE) STD_INPUT_HANDLE;
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
CreateProcess(/*...*/, &si /*...*/);
3 голосов
/ 24 мая 2011

Вы можете создать процесс CMD без окна, но вам нужно установить правильные флаги для этого, когда вы создаете свой процесс, вам также нужно перенаправить вывод.

Если вам нужно разобраться с ipconfig, я бы порекомендовал просто взяться за функции IP Helper Win32 API.

1 голос
/ 24 мая 2011

По крайней мере, в Windows есть несколько звездочек, извлекающих стандартный вывод из всего, что выполняется в командной строке.Если вы когда-нибудь пытались написать замену для командной строки Windows, вы бы знали.Единственный способ получить точный вывод, который я знаю, - это извлекать символы непосредственно из командной строки.Например, в консольном проекте с открытым исходным кодом http://sourceforge.net/projects/console/

В некоторых случаях изменение дескриптора файла стандартного вывода на что-то, из чего вы можете прочитать, будет работать.

...