1、

参考网址:http://www.cnblogs.com/cnarg/archive/2011/02/20/1959292.html

 function TfrmMain.ExecDosCmd :boolean;
var sa :SECURITY_ATTRIBUTES;
si :STARTUPINFO;
pi :PROCESS_INFORMATION; pcDosCmd :PChar;
hRead,hWrite :THandle;
cCommand :array[..] of char; //长达1k的命令行,够用了吧
pcCommand1 :PChar;
cBuffer :array[..] of char; //用4k的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。
bytesRead :DWORD;
dwExitCode :DWORD; buf01 :array[..] of char;
iLen01 :integer;
begin
Result := false;
//pcDosCmd := 'dir c:\'; //可以换成你的命令
pcDosCmd := 'ping 192.168.2.1'; //可以换成你的命令 sa.nLength := sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor := nil;
sa.bInheritHandle := true;
if (not CreatePipe(hRead, hWrite, @sa, )) then
Exit; pcCommand1 := 'Cmd.exe /C ';
ZeroMemory(@cCommand[], length(cCommand));
CopyMemory(@cCommand[], pcCommand1, strlen(pcCommand1));
CopyMemory(@cCommand[strlen(pcCommand1)], pcDosCmd, strlen(pcDosCmd));
cCommand[strlen(pcCommand1) + strlen(pcDosCmd)] := chr(); si.cb := sizeof(STARTUPINFO);
GetStartupInfo(si);
si.hStdError := hWrite; //把创建进程的标准错误输出重定向到管道输入
si.hStdOutput := hWrite; //把创建进程的标准输出重定向到管道输入
si.wShowWindow := SW_HIDE;
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
//关键步骤,CreateProcess函数参数意义请查阅MSDN
if (not CreateProcess(nil, cCommand, nil, nil, true, , nil, nil, si, pi)) then
begin
CloseHandle(hWrite);
CloseHandle(hRead);
Exit;
end;
CloseHandle(hWrite); iLen01 := ;
while (true) do
begin
//ZeroMemory(@cBuffer[0], length(cBuffer));
if (not ReadFile(hRead, cBuffer[], , bytesRead, nil)) then
break;
//cBuffer[bytesRead] := chr(0);
//cBuffer中就是执行的结果,可以保存到文本,也可以直接输出
//Memo1.Lines.Add(cBuffer); //这里是弹出对话框显示
CopyMemory(@buf01[iLen01], @cBuffer[], bytesRead);
iLen01 := iLen01 + bytesRead;
end;
buf01[iLen01] := chr();
Memo1.Lines.Add(buf01); CloseHandle(hRead);
Result := true; dwExitCode := ;
WaitForSingleObject(pi.hProcess, INFINITE);
Windows.GetExitCodeProcess(pi.hProcess, dwExitCode);
Memo1.Lines.Add('子进程 退出码 : '+inttostr(dwExitCode));
end;

PS:CreateProcess()输出到文件 里面用到的 “HANDLE hTemp = GetStdHandle(STD_OUTPUT_HANDLE);”“SetStdHandle(STD_OUTPUT_HANDLE, hFile);// 设置标准输出” ,应该是将本进程默认的标准输入输出都改变了,而非是“将子进程的标准输出重定向到刚刚创建的文件句柄”。

ZC:由于 只执行“SetStdHandle(STD_OUTPUT_HANDLE, hFile);” 的话,本进程的标准输出流是不会改变的,又∵作者在SetStdHandle之后才执行GetStartupInfo,因此子进程的 标准输出被重定位了,而父进程的标准输出没有变化。

A

CreateProcess 执行CMD命令,并重定向输出的更多相关文章

  1. java执行cmd命令并获取输出结果

    1.java执行cmd命令并获取输出结果 import java.io.BufferedReader; import java.io.InputStreamReader; import org.apa ...

  2. C语言使用cmd命令并获取输出方法

    转自http://blog.csdn.net/hxh129/article/details/8000205 C语言使用cmd命令并获取输出方法 在实践中,我们有时候需要用C语言来调用cmd的命令,并得 ...

  3. linux脚本: 后台启动程序并重定向输出信息脚本

    后台启动程序并重定向输出信息脚本 新建文件mstart, 写入下面代码. #!/bin/bash $1 1>/etc/null 2>&1 & 说明 1>/etc/nu ...

  4. C# 执行CMD命令的方法

    /// <summary> /// 执行CMD命令 /// </summary> /// <param name="str"></para ...

  5. 如何使用Java执行cmd命令

    用JAVA代码实现执行CMD命令的方法! Runtime rt = Runtime.getRuntime(); Process p = rt.exec(String[] cmdarray);     ...

  6. SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法

    create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...

  7. Atitit.执行cmd 命令行 php

    Atitit.执行cmd 命令行 php 1. 执行cmd 命令行,调用系统命令的基础 1 1.1. 实际执行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题,程序文件读取编码设置 1 1 ...

  8. java中执行cmd命令

    一.java执行cmd命令的三种方式:http://www.jb51.net/article/80829.htm 参考:https://www.cnblogs.com/zhufu9426/p/7928 ...

  9. JAVA之执行cmd命令

    感言在前:时隔好久没有更新博客园了,忙东忙西也没忙出个什么之所以然来.回首过去一两个月,只能用“疲倦”两个字来形容,而且是身心疲惫.每天11.12个小时的工作我都没觉得烦,但是总是想克服却又很难克服的 ...

随机推荐

  1. Swing实现右下角消息框

    package com.ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; impo ...

  2. (1)安装kvm

    我的环境是redhat虚拟机,版本信息如下: [root@localhost ~]# cat /etc/issue Red Hat Enterprise Linux Server release 6. ...

  3. struts2中在Action中如何获取servlet的api?

    1.通过ActionContext类(拿到的不是真正的servlet api,而是一个map) ActionContext context = ActionContext.getContext(); ...

  4. SQLSERVER---- 通过位运算更改标志位

    当给多个中心传输数据时,怎么标记哪些单位推送了,哪些单位没有更新,如果单独设置一个字段,一来说,扩展不足,另外会造成数据库冗余,这里可以采用SQLSERVER的位运算. 比如说,更新标志位为0,长度为 ...

  5. wps文档怎样去除广告

    安装完 WPS 之后右键—属性—打开文件夹位置(如图) 接下来进入 10.1.0.6929 文件夹内,再次进入 office6 文件夹内,找到 wpscenter 应用程序,将其删除.此应用包含定时弹 ...

  6. ubuntu 16.04.3 安装完成后的一些初始化工作

    虚拟机安装前记得把桥接调好! 1. 重置root密码 sudo passwd, 然后系统会让你输入密码,这时输入的密码就是root用户的密码,su root切用户 2. 设置固定IP,有重启服务功能令 ...

  7. 写shader注意的一些报错

    1.Shader warning in 'Custom/1': Both vertex and fragment programs must be present in a CGPROGRAM. Ex ...

  8. Unity导出AssetBundle到指定路径

    using System.Collections; using UnityEngine; using UnityEditor; using System.IO; /// <summary> ...

  9. 【BZOJ2119】股市的预测 后缀数组+分块

    [BZOJ2119]股市的预测 Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰 ...

  10. [JavaScript]WebBrowser控件下IE版本的检测

    转载请注明原文地址:https://www.cnblogs.com/litou/p/10772272.htm 在客户端检查用户使用的浏览器类型和版本,都是根据navigator.userAgent属性 ...