在VC下执行DOS命令

[cpp]  view plain copy
  1. /* ================================================================================================ 
  2.     方法一: system("md c://12"); 
  3.  
  4.     1) 调用命令时会出现一个dos 窗口一闪而过,影响视觉效果。  
  5.     2)无法将命令的执行结果反馈给用户。 
  6. */  
  7.     system("md c://12");  
  8.   
  9. /* =============================================================================================== */  
  10. /* =============================================================================================== 
  11.     方法二: WinExec("Cmd.exe /C md c://12", SW_HIDE); 
  12.  
  13.     WinExec 的作用是运行指定的程序,其中第一个参数是程序的路径及参数,  
  14.     第二个参数是定义了以怎样的形式启动程序的常数值 ( 详细请见 msdn) 。  
  15.  
  16.  
  17.     比如我们要获得当前目录下的文件列表,可以这样  
  18.  
  19.     WinExec("cmd.exe /c dir > result.txt", SW_HIDE);  
  20.  
  21.     执行这行代码后,将会在当前目录下生成一个 result.txt 的文件,文件的内容就是执行 dir 命令的输出 ( 注 2) 。 
  22.     并且不会出现 dos 窗口 (SW_HIDE 代表隐藏窗口 )  
  23.  
  24.  
  25.     有时候我们需要同时执行数条语句,是不是要执行多次 system 调用呢?  
  26.     答案是否定的, dos 自身提供了执行多条命令的功能,符号 && 代表同时执行多条命令。  
  27.     如“ cd C:/demo && dir ”会首先将目录切换到 C:/demo 文件夹,然后执行 dir 命令。  
  28.  
  29.     利用 && 命令可以实现这样的功能:暂停等待用户按下任意键,接下来执行某个命令。  
  30.     如: pause && dir 会在屏幕上显示“请按任意键继续”和,在用户按下任意键后会 执行 dir 命令输出文件列表。  
  31.  
  32.  
  33.     上面利用 pause 命令实现暂停,但有个副作用:如果用户不按下键盘,程序就会永远停在那里。  
  34.     所以我们可以换个命令以实现暂停某段时间后继续。 pause 命令是不接受参数的,我们要换另一个命令: ping 。 
  35.     可以大家以前也用过 ping ,不过一般是用来探测网络信息的吧?这里用它来实现暂停某段时间:  
  36.     “ ping -w 3000 w > nul ”暂停三秒后继续 ( 注 3)  
  37.  ===============================================================================================  */  
  38. 注 1:  
  39. UINT WinExec(              
  40.   LPCSTR lpCmdLine,   
  41.   UINT uCmdShow   
  42.   );   
  43. /* ===============================================================================================  */  
  44.   
  45.   
  46. /* =============================================================================================== 
  47.     方法三: ShellExecute 
  48.  
  49.     ShellExecute(NULL,"open","d://WINDOWS//system32//cmd.exe","/c md d://zzz","",SW_SHOW); 
  50.  
  51.     WinExec主要运行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);   
  52.     ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。  
  53.     首先必须引用shellapi.pas单元:uses ShellAPI;   
  54.  
  55.     1.标准用法    
  56.       ShellExecute函数原型及参数含义如下:   
  57.       function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;   
  58.       ●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄, 
  59.                 即 Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。   
  60.       ●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹; 
  61.                 “print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时, 
  62.                 表示执行默认操作“open”。   
  63.       ●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。   
  64.       ●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。   
  65.       ●Directory:用于指定默认目录。   
  66.       ●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。   
  67.       若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。   
  68.       上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。   
  69.  
  70.     2.特殊用法    
  71.       如果将FileName参数设置为“http:”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器, 
  72.             则该函数将根据Windows 9x/NT注册表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。   
  73.       格式一:http://网站域名。   
  74.         如:ShellExecute(handle, ‘open’, http:// ;  www.neu.edu.cn’ , nil, nil, SW_SHOWNORMAL);   
  75.       格式二:http://网站域名/网页文件名。   
  76.       如:ShellExecute(handle, ‘open’, http:// ;  www.neu.edu.cn/default.htm’,nil,nil ,       SW_SHOWNORMAL);   
  77.       如果将FileName参数设置为“mailto:”协议格式,那么该函数将启动默认邮件客户程序,如Microsoft Outlook(也包括Microsoft Outlook Express) 
  78.             或Netscape Messanger。若用户机器中安装了多个邮件客户程序,则该函数将根据Windows 9x/NT注册表中mailto协议处理程序的设置确定启动哪个 
  79.             邮件客户程序。   
  80.       格式一:mailto:   
  81.       如:ShellExecute(handle,‘open’, ‘mailto:’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口。   
  82.       格式二:mailto:用户账号@邮件服务器地址   
  83.       如:ShellExecute(handle, ‘open’,‘ mailto:who@mail.neu.edu.cn’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址。 
  84.         若指定多个收件人地址,则收件人地址之间必须用分号或逗号分隔开(下同)如:ShellExecute(this->m_hWnd,"open","mailto:nishinapp@yahoo.com","","",SW_SHOW); 
  85.             这个可以激活Outlook Express。  
  86.         格式三:mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文   
  87.         如:ShellExecute(handle, ‘open’, ‘ mailto:who@mail.neu.edu.cn?subject=Hello&Body=This is a test’, nil, nil, SW_SHOWNORMAL); 
  88.             打开新邮件窗口,并自动填入收件人地址、邮件主题和邮件正文。若邮件正文包括多行文本,则必须在每行文本之间加入换行转义字符%0a。 
  89.  
  90.    ===============================================================================================  */  
  91.   
  92. //  例子(delphi):    
  93. //  在一个应用程序调用c:Project1.exe;    
  94. ShellExecute(handle, ’open’,’c:Project1.exe’,’字串内容’,nil, SW_SHOWNORMAL);    
  95. //  在Project1.exe里可以调用:    
  96. procedure TForm1.FormCreate(Sender: TObject);    
  97. var i:integer;    
  98. begin    
  99. for i:=1 to paramcount do    
  100. if ParamStr(i)〈〉’’ then showmessage(ParamStr(i));    
  101. end;   
  102.   
  103. /* =============================================================================================== 
  104. 最后的那个参数,为窗口指定可视性方面的一个命令。   
  105. 请用下述任何一个常数   
  106. SW_HIDE 隐藏窗口,活动状态给令一个窗口   
  107. SW_MINIMIZE 最小化窗口,活动状态给令一个窗口   
  108. SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态   
  109. SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态   
  110. SW_SHOWMAXIMIZED 最大化窗口,并将其激活   
  111. SW_SHOWMINIMIZED 最小化窗口,并将其激活   
  112. SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口   
  113. SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口   
  114. SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口   
  115. SW_SHOWNORMAL 与SW_RESTORE相同 
  116.  
  117.     =============================================================================================== */  
  118.   
  119.   
  120. /* =============================================================================================== 
  121. 深入浅出ShellExecute      
  122. 译者:徐景周(原作:Nishant       S)    
  123.  
  124. Q:       如何打开一个应用程序?       ShellExecute(this->m_hWnd,"open","calc.exe","","",       SW_SHOW       );    
  125. 或       ShellExecute(this->m_hWnd,"open","notepad.exe",    
  126.                      "c://MyLog.log","",SW_SHOW       );    
  127. 正如您所看到的,我并没有传递程序的完整路径。    
  128. Q:       如何打开一个同系统程序相关连的文档?       ShellExecute(this->m_hWnd,"open",    
  129.          "c://abc.txt","","",SW_SHOW       );    
  130. Q:       如何打开一个网页?       ShellExecute(this->m_hWnd,"open",    
  131.              "http://www.google.com","","",       SW_SHOW       );    
  132. Q:       如何激活相关程序,发送EMAIL?       ShellExecute(this->m_hWnd,"open",    
  133.              "mailto:nishinapp@yahoo.com","","",       SW_SHOW       );    
  134. Q:       如何用系统打印机打印文档?       ShellExecute(this->m_hWnd,"print",    
  135.              "c://abc.txt","","",       SW_HIDE);    
  136. Q:       如何用系统查找功能来查找指定文件?       ShellExecute(m_hWnd,"find","d://nish",    
  137.              NULL,NULL,SW_SHOW);    
  138. Q:       如何启动一个程序,直到它运行结束?       SHELLEXECUTEINFO       ShExecInfo       =       {0};    
  139.          ShExecInfo.cbSize       =       sizeof(SHELLEXECUTEINFO);    
  140.          ShExecInfo.fMask       =       SEE_MASK_NOCLOSEPROCESS;    
  141.          ShExecInfo.hwnd       =       NULL;    
  142.          ShExecInfo.lpVerb       =       NULL;    
  143.          ShExecInfo.lpFile       =       "c://MyProgram.exe";    
  144.          ShExecInfo.lpParameters       =       "";    
  145.          ShExecInfo.lpDirectory       =       NULL;    
  146.          ShExecInfo.nShow       =       SW_SHOW;    
  147.          ShExecInfo.hInstApp       =       NULL;    
  148.          ShellExecuteEx(&ShExecInfo);    
  149.          WaitForSingleObject(ShExecInfo.hProcess,INFINITE);    
  150.          或:       PROCESS_INFORMATION       ProcessInfo;      
  151.          STARTUPINFO       StartupInfo;       //This       is       an       [in]       parameter    
  152.          ZeroMemory(&StartupInfo,       sizeof(StartupInfo));    
  153.          StartupInfo.cb       =       sizeof       StartupInfo       ;       //Only       compulsory       field    
  154.          if(CreateProcess("c://winnt//notepad.exe",       NULL,      
  155.              NULL,NULL,FALSE,0,NULL,    
  156.              NULL,&StartupInfo,&ProcessInfo))    
  157.          {      
  158.              WaitForSingleObject(ProcessInfo.hProcess,INFINITE);    
  159.              CloseHandle(ProcessInfo.hThread);    
  160.              CloseHandle(ProcessInfo.hProcess);    
  161.          }        
  162.          else    
  163.          {    
  164.              MessageBox("The       process       could       not       be       started...");    
  165.          }    
  166.           
  167. Q:       如何显示文件或文件夹的属性?       SHELLEXECUTEINFO       ShExecInfo       ={0};    
  168.          ShExecInfo.cbSize       =       sizeof(SHELLEXECUTEINFO);    
  169.          ShExecInfo.fMask       =       SEE_MASK_INVOKEIDLIST       ;    
  170.          ShExecInfo.hwnd       =       NULL;    
  171.          ShExecInfo.lpVerb       =       "properties";    
  172.          ShExecInfo.lpFile       =       "c://";       //can       be       a       file       as       well    
  173.          ShExecInfo.lpParameters       =       "";      
  174.          ShExecInfo.lpDirectory       =       NULL;    
  175.          ShExecInfo.nShow       =       SW_SHOW;    
  176.          ShExecInfo.hInstApp       =       NULL;      
  177.          ShellExecuteEx(&ShExecInfo);    
  178.  
  179.   =============================================================================================== */  
  180.            
  181. /* ===============================================================================================        
  182.          附:一些windows的系统命令: 
  183.               
  184.              winver---------检查Windows版本  
  185.              wmimgmt.msc----打开windows管理体系结构(WMI)  
  186.              wupdmgr--------windows更新程序  
  187.              wscript--------windows脚本宿主设置  
  188.              write----------写字板  
  189.              winmsd---------系统信息  
  190.              wiaacmgr-------扫描仪和照相机向导  
  191.              winchat--------XP自带局域网聊天  
  192.               
  193.              mem.exe--------显示内存使用情况  
  194.              Msconfig.exe---系统配置实用程序  
  195.              mplayer2-------简易widnows media player  
  196.              mspaint--------画图板  
  197.              mstsc----------远程桌面连接  
  198.              mplayer2-------媒体播放机  
  199.              magnify--------放大镜实用程序  
  200.              mmc------------打开控制台  
  201.              mobsync--------同步命令  
  202.               
  203.              dxdiag---------检查DirectX信息  
  204.              drwtsn32------ 系统医生  
  205.              devmgmt.msc--- 设备管理器  
  206.              dfrg.msc-------磁盘碎片整理程序  
  207.              diskmgmt.msc---磁盘管理实用程序  
  208.              dcomcnfg-------打开系统组件服务  
  209.              ddeshare-------打开DDE共享设置  
  210.              dvdplay--------DVD播放器  
  211.               
  212.              net stop messenger-----停止信使服务  
  213.              net start messenger----开始信使服务  
  214.              notepad--------打开记事本  
  215.              nslookup-------网络管理的工具向导  
  216.              ntbackup-------系统备份和还原  
  217.              narrator-------屏幕“讲述人”  
  218.              ntmsmgr.msc----移动存储管理器  
  219.              ntmsoprq.msc---移动存储管理员*作请求  
  220.              netstat -an----(TC)命令检查接口  
  221.               
  222.              syncapp--------创建一个公文包  
  223.              sysedit--------系统配置编辑器  
  224.              sigverif-------文件签名验证程序  
  225.              sndrec32-------录音机  
  226.              shrpubw--------创建共享文件夹  
  227.              secpol.msc-----本地安全策略  
  228.              syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码  
  229.              services.msc---本地服务设置  
  230.              Sndvol32-------音量控制程序  
  231.              sfc.exe--------系统文件检查器  
  232.              sfc /scannow---windows文件保护  
  233.               
  234.              tsshutdn-------60秒倒计时关机命令  
  235.              tourstart------xp简介(安装完成后出现的漫游xp程序)  
  236.              taskmgr--------任务管理器  
  237.               
  238.              eventvwr-------事件查看器  
  239.              eudcedit-------造字程序  
  240.              explorer-------打开资源管理器  
  241.               
  242.              packager-------对象包装程序  
  243.              perfmon.msc----计算机性能监测程序  
  244.              progman--------程序管理器  
  245.               
  246.              regedit.exe----注册表  
  247.              rsop.msc-------组策略结果集  
  248.              regedt32-------注册表编辑器  
  249.              rononce -p ----15秒关机  
  250.              regsvr32 /u *.dll----停止dll文件运行  
  251.              regsvr32 /u zipfldr.dll------取消ZIP支持  
  252.               
  253.              cmd.exe--------CMD命令提示符  
  254.              chkdsk.exe-----Chkdsk磁盘检查  
  255.              certmgr.msc----证书管理实用程序  
  256.              calc-----------启动计算器  
  257.              charmap--------启动字符映射表  
  258.              cliconfg-------SQL SERVER 客户端网络实用程序  
  259.              Clipbrd--------剪贴板查看器  
  260.              conf-----------启动netmeeting  
  261.              compmgmt.msc---计算机管理  
  262.              cleanmgr-------好东西整理  
  263.              ciadv.msc------索引服务程序  
  264.               
  265.              osk------------打开屏幕键盘  
  266.              odbcad32-------ODBC数据源管理器  
  267.              oobe/msoobe /a----检查XP是否激活  
  268.              lusrmgr.msc----本机用户和组  
  269.              logoff---------注销命令  
  270.               
  271.              iexpress-------木马捆绑工具,系统自带  
  272.               
  273.              Nslookup-------IP地址侦测器  
  274.               
  275.              fsmgmt.msc-----共享文件夹管理器  
  276.               
  277.              utilman--------辅助工具管理器  
  278.               
  279.              gpedit.msc-----组策略  
  280.              xp下运行命令大全.  
  281.               
  282.              $Systemroot$Documents and Settingsusername 目录下  
  283.               
  284.              appwiz.cpl------------添加删除程序  
  285.               
  286.              control userpasswords2--------用户帐户设置  
  287.               
  288.              cleanmgr-------垃圾整理  
  289.               
  290.              CMD--------------命令提示符可以当作是 Windows 的一个附件,Ping,Convert 这些不能在图形环境下 使用的功能要借助它来完成。  
  291.               
  292.              cmd------jview察看Java虚拟机版本。  
  293.               
  294.              command.com------调用的则是系统内置的 NTVDM,一个 DOS虚拟机。它完全是一个类似 Virtual PC 的 虚拟环境,和系统本身联系不大。当我们在命令提示符下运行 DOS 程序时,实际上也 是自动转移到 NTVDM虚拟机下,和 CMD 本身没什么关系。  
  295.               
  296.              calc-----------启动计算器  
  297.               
  298.              chkdsk.exe-----Chkdsk磁盘检查  
  299.               
  300.              compmgmt.msc---计算机管理  
  301.               
  302.              conf-----------启动 netmeeting  
  303.               
  304.              control userpasswords2-----User Account 权限设置  
  305.               
  306.              devmgmt.msc--- 设备管理器  
  307.               
  308.              diskmgmt.msc---磁盘管理实用程序  
  309.               
  310.              dfrg.msc-------磁盘碎片整理程序  
  311.               
  312.              drwtsn32------ 系统医生  
  313.               
  314.              dvdplay--------启动Media Player  
  315.               
  316.              dxdiag-----------DirectX Diagnostic Tool  
  317.               
  318.              gpedit.msc-------组策略编辑器  
  319.               
  320.              gpupdate /target:computer /force 强制刷新组策略  
  321.               
  322.              eventvwr.exe-----事件查看器  
  323.               
  324.              explorer-------打开资源管理器  
  325.               
  326.              logoff---------注销命令  
  327.               
  328.              lusrmgr.msc----本机用户和组  
  329.               
  330.              msinfo32---------系统信息  
  331.               
  332.              msconfig---------系统配置实用程序  
  333.               
  334.              net start (servicename)----启动该服务  
  335.               
  336.              net stop (servicename)-----停止该服务  
  337.               
  338.              notepad--------打开记事本  
  339.               
  340.              nusrmgr.cpl-------同control userpasswords,打开用户帐户控制面板  
  341.               
  342.              Nslookup-------IP地址侦测器  
  343.               
  344.              oobe/msoobe /a----检查XP是否激活  
  345.               
  346.              perfmon.msc----计算机性能监测程序  
  347.               
  348.              progman--------程序管理器  
  349.               
  350.              regedit----------注册表编辑器  
  351.               
  352.              regedt32-------注册表编辑器  
  353.               
  354.              regsvr32 /u *.dll----停止dll文件运行  
  355.               
  356.              route print------查看路由表  
  357.               
  358.              rononce -p ----15秒关机  
  359.               
  360.              rsop.msc-------组策略结果集  
  361.               
  362.              rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen----启动一个空白的Windows 图片和传真查看器  
  363.               
  364.              secpol.msc--------本地安全策略  
  365.               
  366.              services.msc---本地服务设置  
  367.               
  368.              sfc /scannow-----启动系统文件检查器  
  369.               
  370.              sndrec32-------录音机  
  371.               
  372.              taskmgr-----任务管理器(适用于2000/xp/2003)  
  373.               
  374.              tsshutdn-------60秒倒计时关机命令  
  375.               
  376.              winchat--------XP自带局域网聊天  
  377.               
  378.              winmsd---------系统信息  
  379.               
  380.              winver-----显示About Windows 窗口 
  381.               
  382.               
  383.               
  384.              Windows XP的关机是由Shutdown.exe程序来控制的,位于Windows/System32文件夹中。如果想让Windows 2000也实现同样的效果,可以把Shutdown.exe复制到系统目录下。  
  385.               
  386.              比如你的电脑要在22:00关机,可以选择“开始→运行”,输入“at 22:00 Shutdown -s”, 这样,到了22点电脑就会出现“系统关机”对话框,默认有30秒钟的倒计时并提示你保存工作。如果你想以倒计时的方式关机,可以输入 “Shutdown.exe -s -t 3600”,这里表示60 分钟后自动关机,“3600”代表60分钟。  
  387.               
  388.              设置好自动关机后,如果想取消的话,可以在运行中输入“shutdown -a”。另外输入“shutdown -i”,则可以打开设置自动关机对话框,对自动关机进行设置。  
  389.               
  390.              Shutdown.exe的参数,每个都具有特定的用途,执行每一个都会产生不同的效果,比如 “-s”就表示关闭本地计算机,“-a”表示取消关机操作,下面列出了更多参数, 可以在Shutdown.exe中按需使用。  
  391.               
  392.              -f:强行关闭应用程序  
  393.               
  394.              -m //计算机名:控制远程计算机  
  395.               
  396.              -i:显示图形用户界面,但必须是Shutdown的第一个选项  
  397.               
  398.              -l:注销当前用户  
  399.               
  400.              -r:关机并重启  
  401.               
  402.              -t 时间:设置关机倒计时  
  403.               
  404.              -c "消息内容":输入关机对话框中的消息内容(不能超127个字符)  
  405.               
  406.              有时候,我们需要定时关闭计算机,下面介绍一个在Windows XP下实现定时关机的简单方法。  
  407.               
  408.              指定系统在22分钟后自动关闭:点击“开始→运行”,在“打开”中输入命令“Shutdown -s -t 1320”(注意:引号不输入,参数之间有空格,1320的单位是秒),单击“确定”  
  409.              按钮即可。  
  410.               
  411.              指定系统在某个时间(比如12:00)自动关闭:在“打开”中输入命令  
  412.              “at 12:00 Shutdown -s”即可。  
  413.               
  414.              取消定时关机:在“打开”中输入命令“Shutdown -a”即可。 
  415.  
  416.     =============================================================================================== */  
  417.   
  418. /* 
  419.     方法四: CreateProcess 
  420.               
  421.     下面这个示例的函数可以把给定的DOS命令执行一遍,并把DOS下的输出内容记录在buffer中。同时示范了匿名管道重定向输出的用法: 
  422.               
  423.              -------------------------------------------------------------------------------------*/  
  424. #define EXECDOSCMD "dir c:" //可以换成你的命令  
  425.                
  426. BOOL CDOSDlg::ExecDosCmd()  
  427. {  
  428.     SECURITY_ATTRIBUTES sa;  
  429.     HANDLE hRead,hWrite;  
  430.       
  431.     sa.nLength = sizeof(SECURITY_ATTRIBUTES);  
  432.     sa.lpSecurityDescriptor = NULL;  
  433.     sa.bInheritHandle = TRUE;  
  434.       
  435.     if (!CreatePipe(&hRead,&hWrite,&sa,0))  
  436.     {  
  437.         return FALSE;     
  438.     }  
  439.       
  440.     char command[1024]; //长达1K的命令行,够用了吧  
  441.       
  442.     strcpy(command,"Cmd.exe /C ");  
  443.     strcat(command,EXECDOSCMD);  
  444.       
  445.     STARTUPINFO si;  
  446.     PROCESS_INFORMATION pi;  
  447.       
  448.     si.cb = sizeof(STARTUPINFO);  
  449.     GetStartupInfo(&si);  
  450.       
  451.     si.hStdError = hWrite; //把创建进程的标准错误输出重定向到管道输入  
  452.     si.hStdOutput = hWrite; //把创建进程的标准输出重定向到管道输入  
  453.     si.wShowWindow = SW_HIDE;  
  454.     si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;  
  455.       
  456.     //关键步骤,CreateProcess函数参数意义请查阅MSDN  
  457.     if (!CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))      
  458.     {     
  459.         CloseHandle(hWrite);      
  460.         CloseHandle(hRead);   
  461.         return FALSE;     
  462.     }  
  463.     CloseHandle(hWrite);  
  464.       
  465.     char buffer[4096] = {0}; //用4K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。  
  466.     DWORD bytesRead;  
  467.       
  468.     while (true)      
  469.     {     
  470.         if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)      
  471.             break;  
  472.           
  473.         //buffer中就是执行的结果,可以保存到文本,也可以直接输出      
  474.         AfxMessageBox(buffer); //这里是弹出对话框显示   
  475.     }  
  476.       
  477.     CloseHandle(hRead);  
  478.     return TRUE;  
  479. }  
  480. 转自:http://blog.csdn.net/ypist/article/details/8485049      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值