CreateProcess 执行CMD命令,并重定向输出
1、
参考网址:http://www.cnblogs.com/cnarg/archive/2011/02/20/1959292.html
1 function TfrmMain.ExecDosCmd :boolean; 2 var sa :SECURITY_ATTRIBUTES; 3 si :STARTUPINFO; 4 pi :PROCESS_INFORMATION; 5 6 pcDosCmd :PChar; 7 hRead,hWrite :THandle; 8 cCommand :array[0..1023] of char; //长达1k的命令行,够用了吧 9 pcCommand1 :PChar; 10 cBuffer :array[0..4095] of char; //用4k的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。 11 bytesRead :DWORD; 12 dwExitCode :DWORD; 13 14 buf01 :array[0..4095] of char; 15 iLen01 :integer; 16 begin 17 Result := false; 18 //pcDosCmd := 'dir c:\'; //可以换成你的命令 19 pcDosCmd := 'ping 192.168.2.1'; //可以换成你的命令 20 21 sa.nLength := sizeof(SECURITY_ATTRIBUTES); 22 sa.lpSecurityDescriptor := nil; 23 sa.bInheritHandle := true; 24 if (not CreatePipe(hRead, hWrite, @sa, 0)) then 25 Exit; 26 27 pcCommand1 := 'Cmd.exe /C '; 28 ZeroMemory(@cCommand[0], length(cCommand)); 29 CopyMemory(@cCommand[0], pcCommand1, strlen(pcCommand1)); 30 CopyMemory(@cCommand[strlen(pcCommand1)], pcDosCmd, strlen(pcDosCmd)); 31 cCommand[strlen(pcCommand1) + strlen(pcDosCmd)] := chr(0); 32 33 si.cb := sizeof(STARTUPINFO); 34 GetStartupInfo(si); 35 si.hStdError := hWrite; //把创建进程的标准错误输出重定向到管道输入 36 si.hStdOutput := hWrite; //把创建进程的标准输出重定向到管道输入 37 si.wShowWindow := SW_HIDE; 38 si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; 39 //关键步骤,CreateProcess函数参数意义请查阅MSDN 40 if (not CreateProcess(nil, cCommand, nil, nil, true, 0, nil, nil, si, pi)) then 41 begin 42 CloseHandle(hWrite); 43 CloseHandle(hRead); 44 Exit; 45 end; 46 CloseHandle(hWrite); 47 48 iLen01 := 0; 49 while (true) do 50 begin 51 //ZeroMemory(@cBuffer[0], length(cBuffer)); 52 if (not ReadFile(hRead, cBuffer[0], 4095, bytesRead, nil)) then 53 break; 54 //cBuffer[bytesRead] := chr(0); 55 //cBuffer中就是执行的结果,可以保存到文本,也可以直接输出 56 //Memo1.Lines.Add(cBuffer); //这里是弹出对话框显示 57 CopyMemory(@buf01[iLen01], @cBuffer[0], bytesRead); 58 iLen01 := iLen01 + bytesRead; 59 end; 60 buf01[iLen01] := chr(0); 61 Memo1.Lines.Add(buf01); 62 63 CloseHandle(hRead); 64 Result := true; 65 66 dwExitCode := 0; 67 WaitForSingleObject(pi.hProcess, INFINITE); 68 Windows.GetExitCodeProcess(pi.hProcess, dwExitCode); 69 Memo1.Lines.Add('子进程 退出码 : '+inttostr(dwExitCode)); 70 end;
PS:CreateProcess()输出到文件 里面用到的 “HANDLE hTemp = GetStdHandle(STD_OUTPUT_HANDLE);”“SetStdHandle(STD_OUTPUT_HANDLE, hFile);// 设置标准输出” ,应该是将本进程默认的标准输入输出都改变了,而非是“将子进程的标准输出重定向到刚刚创建的文件句柄”。
ZC:由于 只执行“SetStdHandle(STD_OUTPUT_HANDLE, hFile);” 的话,本进程的标准输出流是不会改变的,又∵作者在SetStdHandle之后才执行GetStartupInfo,因此子进程的 标准输出被重定位了,而父进程的标准输出没有变化。
A
转载于:https://www.cnblogs.com/CodeSkill/p/4946045.html
CreateProcess 执行CMD命令,并重定向输出相关推荐
- C++ 执行cmd命令 并获取输出
这是参考别人的 ,具体来源忘了,唉,等想起来一定补上出处 头文件 PipeCmd.h #ifndef _PIPE_CMD_H_ #define _PIPE_CMD_H_#include <Win ...
- C++使用CreateProcess执行cmd命令(实例演示)
使用CreateProcess可以执行cmd命令,也可以执行一些可执行程序. //摘自msdn的示例代码 #include <windows.h> #include <stdio.h ...
- 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )
文章目录 Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 1.生成 bat 脚本注意事项 2.Java 执行 Cmd 命令 3.完整代码示例 4.执行结果 Java 文件生成 ...
- java -version cmd_java如何运行步骤cmd?Java执行cmd命令方法有哪些?
写好一个java程序之后,我们的最终目的就是可以正确的运行程序,如果程序运行正确了,那么代码也就没有什么问题了,可是java如何运行步骤cmd?接下来,我们就来给大家讲解一下这方面的内容. 1.首先用 ...
- python 命令-python执行cmd命令
我们在做手机端自动化的时候有时候可能会遇到需要执行cmd命令完成用例,我们一起学习下,通过python脚本执行cmd命令 cmd是什么 cmd是command的缩写.即命令提示行(CMD),是在OS ...
- 命令行无法运行php,php不支持执行cmd命令行
php不支持执行cmd命令行是因为你没有关闭php配置文件中的安全模式. 在php.ini文件中配置safe_mode参数支持命令执行的方法: 首先,打开php.ini,关掉安全模式safe_mode ...
- Winform中实现执行cmd命令的工具类
场景 Winform中执行cmd命令的工具类,比如调用某些exe,类似mysqldump.exe这样类似的命令. 新建工具类CmdHelper using System; using System.C ...
- python执行cmd并返回是否成功_python脚本执行CMD命令并返回结果的例子
最近写脚本的时想要用python直接在脚本中去执行cmd命令,并且将返回值打印出来供下面调用,所以特意查了下,发现主要有一下几种方式来实现,很简单: 就拿执行adb, adb shell, adb d ...
- python 调用控制台并获取返回结果_python脚本执行CMD命令并返回结果的例子
最近写脚本的时想要用python直接在脚本中去执行cmd命令,并且将返回值打印出来供下面调用,所以特意查了下,发现主要有一下几种方式来实现,很简单: 就拿执行adb, adb shell, adb d ...
最新文章
- Android通过Chrome Inspect调试WebView
- 朗讯项目的一个概括总结.
- Android简易音乐播放器实现代码
- 我最喜欢的IntelliJ IDEA功能
- “BindingNavigator”如何在删除前弹出确认框?
- Recommendation
- CPU输入/输出的控制方式有哪些?
- 倾斜摄影发展历程简介
- Android 10 SystemUI中Android.bp文件中集成第三方JAR包或者so文件的方法
- 世界著名半导体公司及其官网
- 最详细的Log4j使用教程
- 汽车制造行业汽车电子,从哪里开始,你合适吗?
- 计算格拉姆矩阵_如何用简单易懂的例子解释格拉姆矩阵/Gram matrix?
- 大家来讨论怎么写概要设计
- 新必应 new bing【NB】这不比知云翻译香
- week05-继承、多态、抽象类与接口
- Linux shell编程100例
- python保存requests请求的文件的实战代码
- 语音标注必须了解的基础知识点
- Memcached单键超1M数据量的拆分设计及测试
热门文章
- python埋点测试_测试一面(宇宙条)
- Docker容器镜像删除不掉解决办法?
- dofilter在java中_在Filter的doFilter中进行重定向 出现异常
- Javascript模块化编程系列一: 模块化的驱动
- DedeCMS 批量删除垃圾注册用户和垃圾文档
- java spark es_ES-Spark连接ES后,ES Client节点流量打满分析
- linux命令及其使用方法,Linux命令及其使用方法
- Farey Sequence(欧拉函数板子题)
- Windows操作系统下使用pip安装pygame
- 将tomcat设置成window自启动服务