代码如下:
function CallCmd(CommandStr: string): string; const ReadBuffer = 4096; var Security: TSecurityAttributes; si: TStartUpInfo; pi: PROCESS_INFORMATION; hRead,hWrite: THandle; len: DWORD; ExitCode: DWORD; Buffer: PAnsiChar; hProcess: Integer; begin with Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if not Createpipe(hRead,hWrite,@Security,0) then begin ShowMessage(‘Pipe Create Error 0x01‘); end; //GetStartupInfo(si); FillChar(si,Sizeof(si),#0); with si do begin cb := SizeOf(si); dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; wShowWindow := SW_HIDE; hStdOutput := hWrite; hStdError := hWrite; end; if not CreateProcess(nil,PWideChar(‘cmd.exe /c ‘ + CommandStr),0,TRUE,si,pi) then begin ShowMessage(‘Create Process Error‘); end; CloseHandle(hWrite); Buffer := AllocMem(ReadBuffer + 1); while True do begin PeekNamedPipe(hRead,0,@len,0); if len <> 0 then begin ReadFile(hRead,Buffer[0],ReadBuffer,dword(len),nil); {out date} with Form1.mmo1 do begin Lines.Text := Lines.Text + Buffer; SelStart := Length(Lines.Text); SelLength := 0; end; end else begin //Break; GetExitCodeProcess(pi.hProcess,ExitCode); if ExitCode <> STILL_ACTIVE then begin CloseHandle(hRead); Break; end; end; end; end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。