Вверх ↑
Этот топик читают: Гость
Ответов: 1
Рейтинг: 0
#1: 2017-01-28 16:58:16 ЛС | профиль | цитата
Есть у нас реализованная процедура
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
Сообщение
...
Прикрепленные файлы
(файлы не залиты)