获取cmd返回的结果

复制代码
procedure RunMSDOS(Str: string);
var
  Command: string;
  Output: string;
  Buffer: array[0..255] of Char;
  Security: TSecurityAttributes;
  ReadPipe, WritePipe: THandle;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  BytesRead: DWORD;
begin
  Command := Str;

  FillChar(Security, SizeOf(TSecurityAttributes), 0);
  Security.nLength := SizeOf(TSecurityAttributes);
  Security.bInheritHandle := True;
  Security.lpSecurityDescriptor := nil;


  if CreatePipe(ReadPipe, WritePipe, @Security, 0) then
  begin
    try
      ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
      StartupInfo.cb := SizeOf(TStartupInfo);
      StartupInfo.hStdOutput := WritePipe;
      StartupInfo.hStdError := WritePipe;
      StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_HIDE;

      if CreateProcess(nil, PChar('cmd.exe /C ' + Command), nil, nil, True, CREATE_NO_WINDOW, nil, nil, StartupInfo, ProcessInfo) then
      begin
        try
          CloseHandle(WritePipe);
          Output := '';

          repeat
            if ReadFile(ReadPipe, Buffer, 255, BytesRead, nil) then
            begin
              Buffer[BytesRead] := #0;
              Output := Output + Buffer;
            end
            else
              Break;
          until BytesRead = 0;
            form1.mmo1.Lines.add(Output);
        finally
          CloseHandle(ProcessInfo.hProcess);
          CloseHandle(ProcessInfo.hThread);
        end;
      end;
    finally
      CloseHandle(ReadPipe);
    end;
  end;
end;
复制代码

转载:https://blog.csdn.net/qq_45083002/article/details/131138572

posted @   Tag  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2021-09-04 关于SQL事务的一些坑
点击右上角即可分享
微信分享提示