执行命令行, 并获取输出字符(比如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 ...
随机推荐
- [转]Struts2工作原理
Struts2请求响应流程: 在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller.ActionProxy.ActionMapping.Co ...
- linux 使用 nvidia 的 gpu
第一种方法: [Wizard@Wizard ~]$ nvidia-detect kmod-nvidiaOptimus hardware detected: An Intel display contr ...
- input文本框设置和移除默认值
input文本框设置和移除默认值 这里想实现的效果是:设置和移除文本框默认值,如下图鼠标放到文本框中的时候,灰字消失. 1.可以用简单的方式,就是给input文本框加上onfocus属性,如下代码: ...
- JavaScript高级程序设计学习笔记--表单脚本
提交表单 用户单击提交按钮或图像按钮时,就会提交表单.使用<input>和<button>都可以定义提交按钮,只要将其type特性的值设置为"submit" ...
- oracle中lead和lag函数 (转载)
解决上一户和下一户问题这两个函数,是偏移量函数,其用途是:可以查出同一字段下一个值或上一个值. lead(col_name,num,flag) col_name是列名:num是取向下第几个值:flag ...
- ajax提交form表单资料详细汇总
一.ajax提交form表单和不同的form表单的提交主要区别在于,ajax提交表单是异步提交的,而普通的是同步提交的表单.通过在后台与服务器进行少量数据交换,ajax 可以使网页实现异步更新.这意味 ...
- AngularJS 表格
ng-repeat 指令可以完美的显示表格. 使用 angular 显示表格是非常简单的: <!DOCTYPE html> <html> <head> <me ...
- poi导出word、excel
在实际的项目开发中,经常会有一些涉及到导入导出的文档的功能.apache开源项目之一poi对此有很好的支持,对之前的使用做一些简要的总结. 1,导入jar 为了保证对格式的兼容性,在项目的pom.xm ...
- cryptkeeper的使用
转自:http://www.linuxidc.com/Linux/2011-06/37070.htm Cryptkeeper 是加密文件系统 EncFS 的前端工具,以 Gnome Applet 方式 ...
- html标准
html1.使用双引号2. <img src=""> 不添加/3. <html lang="zh-CN">4. <a class= ...