Есть у нас реализованная процедура
procedure THIWinExec._work_doConsoleExec;
var
sa: TSECURITYATTRIBUTES;
si: TSTARTUPINFO;
pi: TPROCESSINFORMATION;
Res: Boolean;
CommandLine:string;
FN,params:string;
begin
Fn := ReadString(_Data,_data_FileName,_prop_FileName);
Params := ReadString(_Data,_data_Params,_prop_Param);
CommandLine := Fn + ' ' + Params;
Terminate;
sa.nLength := sizeof(sa);
sa.bInheritHandle := true;
sa.lpSecurityDescriptor := nil;
CreatePipe(hPipeInputRead, hPipeInputWrite, @sa, 0);
CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);
CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
ZeroMemory(@si, SizeOf(si));
ZeroMemory(@pi, SizeOf(pi));
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_HIDE;
si.hStdInput := hPipeInputRead;
si.hStdOutput := hPipeOutputWrite;
si.hStdError := hPipeErrorsWrite;
Res := CreateProcess(nil, PChar(CommandLine), nil, nil, true,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
// Procedure will exit if CreateProcess fail
if not Res then
begin
CloseHandle(hPipeInputRead);
CloseHandle(hPipeOutputWrite);
CloseHandle(hPipeErrorsWrite);
CloseHandle(hPipeInputWrite);
CloseHandle(hPipeOutputRead);
CloseHandle(hPipeErrorsRead);
hProcess := 0;
Exit;
end;
hProcess := pi.hProcess; FRead := true;
hReadThread := CreateThread(nil,1024,@ReadFunc,Self,0,dwReadThreadID);
_hi_onEvent(_event_onExec);
end;
Чтобы показать консоль после открытия нам достаточно установить значение si.wShowWindow := SW_NORMAL.
Но нужно ещё и оставить стандартный вывод, не перенаправляя его никуда. Как это сделать?
P.S. ТОЛЬКО вывод)
Этот топик читают: Гость
Ответов: 1
Рейтинг: 0
|
|||
карма: 1 |
|
1