
22.07.2011, 16:11
|
 |
Прохожий
|
|
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
|
|
Код:
procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings);
var
securityattributes: TSecurityAttributes;
startupinfo: TStartupInfoA;//тут ругается и после этого на всё остальное
processinformation: TProcessInformation;
hPipeInputRead: THandle;
hPipeInputWrite: THandle;
hPipeOutputRead: THandle;
hPipeOutputWrite: THandle;
WaitResult:Cardinal;
buf: array [0..1023] of AnsiChar;
dummy: Cardinal;
begin
OutStrings.Append(#13#10);
securityattributes.nLength:=SizeOf(TSecurityAttributes);
securityattributes.lpSecurityDescriptor:=nil;
securityattributes.bInheritHandle:=True;
CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0);
CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0);
ZeroMemory(@startupinfo, SizeOf(TStartupInfo));
ZeroMemory(@processinformation, SizeOf(TProcessInformation));
startupinfo.cb:=SizeOf(TStartupInfo);
startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
startupinfo.wShowWindow:=SW_HIDE;
startupinfo.hStdInput:=hPipeInputRead;
startupinfo.hStdOutput:=hPipeOutputWrite;
startupinfo.hStdError:=hPipeOutputWrite;
OutStrings.BeginUpdate;
OutStrings.Append(CmdLine+' '+Params);
OutStrings.EndUpdate;
if CreateProcessA(nil, PAnsiChar(CmdLine+' '+Params), nil, nil, True, CREATE_NEW_CONSOLE,
nil, PAnsiChar(AnsiStrings.ExtractFileDir(CmdLine)), startupinfo, processinformation) then
begin
repeat
WaitResult:=WaitForSingleObject(processinformation.hProcess, 100);
if ReadFile(hPipeOutputRead, buf, Length(buf), dummy, nil) then
begin
OemToAnsiBuff(buf, buf, dummy);
OutStrings.BeginUpdate;
OutStrings.Text:=OutStrings.Text+Copy(buf, 1, dummy);
OutStrings.EndUpdate;
end;
until WaitResult<>WAIT_TIMEOUT;
CloseHandle(processinformation.hProcess);
end;
CloseHandle(hPipeInputWrite);
CloseHandle(hPipeInputRead);
CloseHandle(hPipeOutputWrite);
CloseHandle(hPipeOutputRead);
end;
end.
вот=\
|