Delphi 匿名管道
发布时间:2020-12-15 09:54:51 所属栏目:大数据 来源:网络整理
导读:代码如下: 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; hProc
代码如下: 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |