Показать сообщение отдельно
  #3  
Старый 22.07.2011, 16:11
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 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.

вот=\
Ответить с цитированием