该代码片段来自于: http://www.sharejs.com/codes/delphi/8999,发现好多代码,想用的时候找不到,记录一下备用

function RunDosCommand(Command: string): string;var  hReadPipe: THandle;  hWritePipe: THandle;  SI: TStartUpInfo;  PI: TProcessInformation;  SA: TSecurityAttributes;  //     SD   :   TSecurityDescriptor;  BytesRead: DWORD;  Dest: AnsiString;  TmpList: TStringList;  Avail, ExitCode, wrResult: DWORD;  osVer: TOSVERSIONINFO;  tmpstr: AnsiString;begin  SetLength(Dest, 1024);  osVer.dwOSVersionInfoSize := Sizeof(TOSVERSIONINFO);  GetVersionEX(osVer);

  if osVer.dwPlatformId = VER_PLATFORM_WIN32_NT then  begin  //         InitializeSecurityDescriptor(@SD,   SECURITY_DESCRIPTOR_REVISION);  //         SetSecurityDescriptorDacl(@SD,   True,   nil,   False);    SA.nLength := SizeOf(SA);    SA.lpSecurityDescriptor := nil; //@SD;    SA.bInheritHandle := True;    CreatePipe(hReadPipe, hWritePipe, @SA, 0);  end  else    CreatePipe(hReadPipe, hWritePipe, nil, 1024);  try    FillChar(SI, SizeOf(SI), 0);    SI.cb := SizeOf(TStartUpInfo);    SI.wShowWindow := SW_HIDE;    SI.dwFlags := STARTF_USESHOWWINDOW;    SI.dwFlags := SI.dwFlags or STARTF_USESTDHANDLES;    SI.hStdOutput := hWritePipe;    SI.hStdError := hWritePipe;    if CreateProcess(nil, PChar(@Command[1]), nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then    begin      ExitCode := 0;      while ExitCode = 0 do      begin        wrResult := WaitForSingleObject(PI.hProcess, 500);  //                 if   PeekNamedPipe(hReadPipe,   nil,   0,   nil,   @Avail,   nil)   then        if PeekNamedPipe(hReadPipe, @Dest[1], 1024, @Avail, nil, nil) then        begin          if Avail > 0 then          begin            TmpList := TStringList.Create;            try              FillChar(Dest[1], Length(Dest) * SizeOf(Char), 0);              ReadFile(hReadPipe, Dest[1], Avail, BytesRead, nil);              TmpStr := Copy(Dest, 0, BytesRead - 1);              TmpList.Text := TmpStr;              Result := tmpstr;            finally              TmpList.Free;            end;          end;        end;        if wrResult <> WAIT_TIMEOUT then ExitCode := 1;      end;      GetExitCodeProcess(PI.hProcess, ExitCode);      CloseHandle(PI.hProcess);      CloseHandle(PI.hThread);    end;  finally    CloseHandle(hReadPipe);    CloseHandle(hWritePipe);  end;end;
//该代码片段来自于: http://www.sharejs.com/codes/delphi/8999, 并进行了适当的修改

转载于:https://www.cnblogs.com/littlestone08/p/8629184.html

Delphi通过管道执行外部命令行程序(cmd)并获取返回结果相关推荐

  1. c语言程序命令行,ttyd(C语言编写的命令行程序) v1.3.1 免费版

    ttyd是一个C语言编写的命令行程序,可以把任意命令行程序分享到网页上操作,可以看做是个网页版的远程终端,支持 Linux.macOS 系统,还可以运行在 OpenWrt 之类的嵌入式系统上. 功能特 ...

  2. 手把手教你用delphi 10.2.3 在windows上编译Centos 7下的命令行程序,适合中小学生

    手把手教你用delphi 10.2.3 在windows上编译Centos 7下的命令行程序,适合中小学生 1.下载并安装     a)下载:delphicbuilder10_2_3_2631.iso ...

  3. 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()

    >>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 在LoadRunner中执行命 ...

  4. runtime java_Java runtime.getruntime()从执行命令行程序获得输出

    Java runtime.getruntime()从执行命令行程序获得输出 我正在使用运行时从我的Java程序运行命令提示符命令.但是,我不知道如何获得命令返回的输出. 这是我的代码:Runtime  ...

  5. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  6. python3中使用subprocess模块执行外部命令

    一. subprocess模块介绍 subprocess模块可以替代os模块下的os.system和os.popen等操作方法 subprocess模块在python2和python3上的使用上有一定 ...

  7. php 运行外部程序_PHP在linux上执行外部命令的方法

    目录: 一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用 ...

  8. php在linux中执行外部命令

    目录: 一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用 ...

  9. Linux培训教程 浅谈:PHP在linux上执行外部命令(整理)

    一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用专门函数 ...

最新文章

  1. kafka多分区只有一个在消费_kafka多个消费者只有一个消费
  2. JavaScript 事件入门知识
  3. Kafka学习:CentOS7下Kafka集群搭建
  4. python文件和数据的格式化_Python在文本文件中格式化特定数据
  5. tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化
  6. 【云周刊】第128期:支撑千亿营收背后秘密——首届阿里巴巴研发效能嘉年华...
  7. Apache NIO 框架 Mina 使用中出现 too many open files 有关...
  8. STL(五)——slist/list链表
  9. ANSI字符与Unicode字符的互相转换
  10. 深度学习实战之车牌识别项目
  11. three.js 05-04 之 BoxGeometry 几何体
  12. [IT名人堂]《人件》作者:汤姆.迪马可
  13. 测试用例的设计-面试常见问题(基础篇)
  14. Error: Unbalanced delimiter found in string
  15. 如何用计算机弹出斗地主的声音,电脑为什么只有斗地主的时候有声音?
  16. CA、公钥、私钥的基本概念
  17. android 绘画笔迹回放_android画板笔锋实现
  18. SA387Gr22合金板采购标书
  19. 高等数学学习笔记——第二十九讲——罗尔定理与拉格朗日中值定理
  20. 入门首选,Requests 库的基本使用

热门文章

  1. Mybatis Plus配置以及单表操作
  2. 力扣 求根到叶子节点数字之和
  3. Hadoop有什么用
  4. 现在的孩子为什么厌学的那么多?孩子厌学了怎么办?
  5. 汽车上有哪些很难发现却非常实用的配置?
  6. 都说比特币无价值,涨得不合理;但你知道比特币最大的用途吗?
  7. 别人的趋势不一定是你的未来
  8. 有人羡慕过自由职业吗?
  9. 越是牛逼的人,越是不在意面子
  10. 微信小程序的特点是什么?