Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
该代码片段来自于: 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)并获取返回结果相关推荐
- c语言程序命令行,ttyd(C语言编写的命令行程序) v1.3.1 免费版
ttyd是一个C语言编写的命令行程序,可以把任意命令行程序分享到网页上操作,可以看做是个网页版的远程终端,支持 Linux.macOS 系统,还可以运行在 OpenWrt 之类的嵌入式系统上. 功能特 ...
- 手把手教你用delphi 10.2.3 在windows上编译Centos 7下的命令行程序,适合中小学生
手把手教你用delphi 10.2.3 在windows上编译Centos 7下的命令行程序,适合中小学生 1.下载并安装 a)下载:delphicbuilder10_2_3_2631.iso ...
- 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()
>>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 在LoadRunner中执行命 ...
- runtime java_Java runtime.getruntime()从执行命令行程序获得输出
Java runtime.getruntime()从执行命令行程序获得输出 我正在使用运行时从我的Java程序运行命令提示符命令.但是,我不知道如何获得命令返回的输出. 这是我的代码:Runtime ...
- 基于Golang的CLI 命令行程序开发
基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...
- python3中使用subprocess模块执行外部命令
一. subprocess模块介绍 subprocess模块可以替代os模块下的os.system和os.popen等操作方法 subprocess模块在python2和python3上的使用上有一定 ...
- php 运行外部程序_PHP在linux上执行外部命令的方法
目录: 一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用 ...
- php在linux中执行外部命令
目录: 一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用 ...
- Linux培训教程 浅谈:PHP在linux上执行外部命令(整理)
一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用专门函数 ...
最新文章
- kafka多分区只有一个在消费_kafka多个消费者只有一个消费
- JavaScript 事件入门知识
- Kafka学习:CentOS7下Kafka集群搭建
- python文件和数据的格式化_Python在文本文件中格式化特定数据
- tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化
- 【云周刊】第128期:支撑千亿营收背后秘密——首届阿里巴巴研发效能嘉年华...
- Apache NIO 框架 Mina 使用中出现 too many open files 有关...
- STL(五)——slist/list链表
- ANSI字符与Unicode字符的互相转换
- 深度学习实战之车牌识别项目
- three.js 05-04 之 BoxGeometry 几何体
- [IT名人堂]《人件》作者:汤姆.迪马可
- 测试用例的设计-面试常见问题(基础篇)
- Error: Unbalanced delimiter found in string
- 如何用计算机弹出斗地主的声音,电脑为什么只有斗地主的时候有声音?
- CA、公钥、私钥的基本概念
- android 绘画笔迹回放_android画板笔锋实现
- SA387Gr22合金板采购标书
- 高等数学学习笔记——第二十九讲——罗尔定理与拉格朗日中值定理
- 入门首选,Requests 库的基本使用