执行命令行, 并获取输出字符(比如OSQL)
直接贴代码了, 没什么好说的, 很简单, 也不需要注释
function DoCMD(ACommand: AnsiString; var ACmdResult: string): Boolean;
var
nStrs: TStringBuilder; {旧版本可以用TStringlist替代}
nHReadPipe, nHWritePipe: THandle;
nSI: STARTUPINFOA;
nLSA: SECURITY_ATTRIBUTES;
nPI: PROCESS_INFORMATION;
nBufferSize, nRBufferSize, nEC: DWORD;
nPH: array[..] of AnsiChar;
begin
Result := False; with nLSA do
begin
nLength := SizeOf(SECURITY_ATTRIBUTES);
lpSecurityDescriptor := nil;
bInheritHandle := True;
end; if not CreatePipe(nHReadPipe, nHWritePipe, @nLSA, ) then
raise Exception.Create('管道创建失败 ' + SysErrorMessage(GetLastError)); try
GetStartupInfoA(nSI);
with nSI do
begin
dwFlags := (STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
wShowWindow := SW_HIDE;
hStdOutput := nHWritePipe;
end; nStrs := TStringBuilder.Create;
try
if not CreateProcessA(nil, PAnsiChar(ACommand), nil, nil,
True, , nil, nil, nSI, nPI) then
raise Exception.Create('进程创建失败 ' + SysErrorMessage(GetLastError));
try
nRBufferSize := ;
repeat
GetExitCodeProcess(nPI.hProcess, nEC);
PeekNamedPipe(nHReadPipe, @nPH, Length(nPH) - , @nBufferSize, nil, nil);
if nBufferSize <> then
begin
ReadFile(nHReadPipe, nPH, nBufferSize, nRBufferSize, nil);
nPH[nRBufferSize] := #;
nRBufferSize := ;
nStrs.Append(nPH);
end;
until nEC <> STILL_ACTIVE;
nPH[nRBufferSize] := #;
nStrs.Append(nPH);
ACmdResult := nStrs.ToString;
Result := True;
finally
CloseHandle(nPI.hThread);
CloseHandle(nPI.hProcess);
end;
finally
nStrs.Free;
end;
finally
CloseHandle(nHReadPipe);
CloseHandle(nHWritePipe);
end;
end;
执行命令行, 并获取输出字符(比如OSQL)的更多相关文章
- Python执行命令行
背景 我们知道,虽然会破坏平台独立性,但是有的时候需要在代码里面调用命令行来获取一些信息,那么了解在 Python 中如何执行命令行至关重要 使用介绍 Python 中使用命令行可以通过 subpro ...
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system( ...
- 一些坑 Java 执行命令行命令 Spring Boot 打包为jar ResourceUtils.getFile 等出现的问题
Java 执行命令行命令 这个没技术含量的东西耗费了我半个多小时 String command = ....; Process process = Runtime.getRuntime().exec( ...
- [delphi]运行cmd命令,并取得输出字符
http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ...
- 【转载】在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...
- 执行命令行并等待完成(使用WaitForSingleObject达到目的)
function TDMDb.WaitExeFinish(const sCmdName: string):boolean; var StartupInfo: TStartupInfo; Process ...
- 如何在sublime编辑器中,执行命令行脚本
我有个愿意,在执行命令行时,不打开那个黑乎乎命令行窗口,如果编辑器内置支持就好了. 打开vs code 和 sublime,分别按快捷键 Ctrl + ·(tab键上面那个键),vs code可以提供 ...
- 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...
- 通过web php 执行shell脚本,获取的结果与直接在命令行下获取的结果不同。
公司项目中的一项小功能,统计设备的连接数.其中用到shell脚本来获取已连接设备的统计.使用命令 /bin/netstat -an| grep ESTABLISHED | awk '{print $4 ...
随机推荐
- Java Swing
参考帖子http://chenchaobox.blog.163.com/blog/static/6043759020127845945569/ http://wenku.baidu.com/link? ...
- Count Complete Tree Nodes
Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...
- mysql事务和锁InnoDB
背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备 ...
- iOS 图形处理 Core Graphics Quartz2D 教程
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的 绘图.变换.颜色管理.脱屏 ...
- 利用office2010 word2010生成目录
详细内容可以从以下链接下载: http://www.360disk.com/file-37040.html 从前一直用word的目录功能,觉得很方便.第一:可以在目录的首页通过Ctrl+鼠标单击左键可 ...
- “ifstream” 未声明的标识符
#include <fstream> 还要加入: using namespace std;
- AT常见问题
https://m.douban.com/note/247040789/?from=author
- ASP.NET MVC cs类中根据Controller和Action生成URL
var Url = new UrlHelper(HttpContext.Current.Request.RequestContext); Url.Action("AnnounceDetail ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
- Eclipse - 常用插件介绍
1.MyBatis Generator 2.FindBugs Feature http://findbugs.cs.umd.edu/eclipse 待完善.