Delphi 调用CMD命令行,路径包含空格处理方法
//执行CMD命令行并获取返回值 function TLeiDianApi.ExcuteDosCmd(CommandLine: string): string; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of AnsiChar; BytesRead: Cardinal; Handle: Boolean; preTickcount: Integer; begin Result := ''; with SA do begin nLength := SizeOf(SA); bInheritHandle := True; lpSecurityDescriptor := nil; end; CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0); try with SI do begin FillChar(SI, SizeOf(SI), 0); cb := SizeOf(SI); dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow := SW_HIDE; hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin hStdOutput := StdOutPipeWrite; hStdError := StdOutPipeWrite; end; Handle := CreateProcess(nil, //lpApplicationName: PChar PChar('cmd /c ' + CommandLine), //lpCommandLine: PChar nil, //lpProcessAttributes: PSecurityAttributes nil, //lpThreadAttributes: PSecurityAttributes True, //bInheritHandles: BOOL 0, //CREATE_NEW_CONSOLE nil, nil, SI, PI); CloseHandle(StdOutPipeWrite); if Handle then try preTickcount := GetTickCount; repeat WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); if BytesRead > 0 then begin Buffer[BytesRead] := #0; Result := Result + Buffer; end; if GetTickCount - preTickcount > 10 * 1000 then begin OutputDebugStringW(PChar('mz:ExcuteDosCmd timeOut')); Break; end; until not WasOK or (BytesRead = 0); WaitForSingleObject(PI.hProcess, INFINITE); finally CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; finally CloseHandle(StdOutPipeRead); end; end; //tip:如果路径中包含空格,使用 "" 号即可 //夜神 function TLeiDianApi.KillAppByIndexAndName(index: DWORD; packageName: string): Boolean; var sCmd: string; sOut: string; begin sCmd := Format('"%s" killapp -index:%d -packagename:%s', [FConsolePath, index, packageName]); sOut := ExcuteDosCmd(sCmd); Result := True; end; ———————————————— 来源:https://blog.csdn.net/u011706768/article/details/120498608
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.040832996368408 seconds