![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как спрятать вывод на консоль? [D7, WinXP]
Zheksonz © (2009-03-24 19:19:00)Вечер добрый. Использую следующий код для запуска консольной программы и ожидания её завершения:
procedure StartDistr;
var si: STARTUPINFO;
pi: PROCESS_INFORMATION;
cmdline: string;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
cmdline := ExtractFilePath(ParamStr(0)) + 'DNE.EXE';
Form2.Show;
Application.ProcessMessages;
if not CreateProcess( nil, { No module name (use command line). }
PChar(cmdline), { Command line. }
nil, { Process handle not inheritable. }
nil, { Thread handle not inheritable. }
False, { Set handle inheritance to FALSE. }
0, { No creation flags. }
nil, { Use parent's environment block. }
nil, { Use parent's starting directory. }
si, { Pointer to STARTUPINFO structure. }
pi ) { Pointer to PROCESS_INFORMATION structure. }
then
begin
ShowMessage( 'CreateProcess failed.' );
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
end;
как мне спрятать вывод на консоль и где можно почитать про параметры STARTUPINFO и PROCESS_INFORMATION.
Anatoly Podgoretsky (2009-03-26 16:45:00) [1]У тебя это великолепно выходит.
Zhekson (2009-03-26 16:10:00) [2]Anatoly Podgoretsky © (25.03.09 13:16) [6]
это слишком просто для тех, кто сначала думает, а потом делает... ;)
В моем же случае просто необходимо сначала "шишек набить" (((
в общем флаг CREATE_NO_WINDOW сработал, при обязательном выключении полноэкранности запускаемого приложения.
Anatoly Podgoretsky (2009-03-25 13:16:00) [3]> Riply (24.03.2009 19:25:02) [2]
Это слишком просто.
Zhekson (2009-03-25 10:52:00) [4]с флагом
CREATE_NO_WINDOW, на третьем компе, вообще перестало запускаться приложение, выдавая следующее сообщение:
"16-разрядная подсистема MS-DOS
не удалось провести инициализацию режима для видеоустройства"
итого имеем:
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
не срабатывает
аCREATE_NO_WINDOWвообще не запускает приложение...
Zhekson (2009-03-25 09:48:00) [5]прошу прощения, поспешил с вопросом...
сейчас ситуация такая:
si.dwFlags := STARTF_USESHOWWINDOW
si.wShowWindow := SW_HIDE;
на моём рабочем и домашнем компе установка этих опций скрывает консоль, а вот на третьем компьютере, консоль не скрывается((( Удивительно то, что запускается одно и то же ДОСовское приложение и даже система стоит с одного DVD диска.
полез тогда в свойства CreateProcess, установил флаг CREATE_NO_WINDOW, что позволило убрать код:
si.dwFlags := STARTF_USESHOWWINDOW
si.wShowWindow := SW_HIDE;
и консоль скрывается, но, чисто теоретически, где вероятность что на третьем компе она опять не появится??? пока возможности испытать нет((
Немо (2009-03-25 09:02:00) [6]у меня и так этот код не показывает консоль
Riply (2009-03-24 19:25:00) [7]> где можно почитать про параметры STARTUPINFO и PROCESS_INFORMATION
В Help`е ?
Palladin (2009-03-24 19:24:00) [8]
> где можно почитать про параметры STARTUPINFO и PROCESS_INFORMATION.
Глупый вопрос. Тебе не кажется?