现在的位置: 首页 > 综合 > 正文

[VC++]打开或运行外部程序

2017年10月09日 ⁄ 综合 ⁄ 共 2037字 ⁄ 字号 评论关闭

这里主要用到三个SDK函数: WinExec, ShellExecute,CreateProcess


【1】定义头文件

必须定义以下两个头文件:
#include <shlobj.h> // 可替换为 windows.h
#include <shellapi.h>
如果定义了头文件 #include <windows.h>的话就不必定义 #include <shlobj.h>了。


【2】定义路径


C++中所表示的路径要用 \" \\\\ \"而不是寻常所用的\" \\ \",所以以上三个函数表示路径都为:disk:\\\\Directory\\\\...\\\\File name

WinExec(\"D:\\\\Program Files\\\\Test\\\\Test.exe\"SW_SHOWMAXIMIZED);
ShellExecute(NULL\"open\"\"C:\\\\Test.txt\"NULLNULLSW_SHOWNORMAL);


1、调用API: int system( const char *command ); 
你可以传入一命令,启动某个程序。如\"ping www.vccode(大学创业演示站)\" \"YourExe\"等等 
不过这里有几点要值得注重: 


(1)、他不会立刻返回,直到你启动的程序执行完成。 

(2)、假如你启动是windows程序,它仍旧会启动一个控制台,这就给人感觉太差劲了,但假如本身是控制台的,而且又需要等待它的完成,那这将是比较好的选择。 

(3)、它的返回值代表是否执行成功以及程序的退出码。

(4)、不能运行*.txt文件或\"www.baidu.com\"


2、调用API: 

UINT WinExec( 
LPCSTR lpCmdLine // command line 
UINT uCmdShow // window style 
); 


这个API与API:system同样的使用简朴,同用是使用命令行型式。 
不过它与API:system相比,有几个长处: 

(1)、它将启动了一个新进程,并且立刻返回,因此你的程序无需等待。 

(2)、它的多了一个参数:uCmdShow,通过它你可以一定程度上控件窗体的显示,比如让它后台运行而不显示出来。 

(3)、它无论启动控制台程序还是windows程序都只做你想要做的事。 

它的不足之处: 

(1)、它完全与本进程脱离,无法对做些必要的控制 

(2)、无法得知启动的程序是否退出。 

(3)、得不到启动的程序的退出码。 

(4)、不能运行*.txt文件或\"www.baidu.com\"


3、调用 ShellExecute:

HINSTANCE ShellExecute( 
HWND hwnd 
LPCTSTR lpVerb 
LPCTSTR lpFile 
LPCTSTR lpParameters 
LPCTSTR lpDirectory 
INT nShowCmd 
); 


它也有WinExec同样的缺点。 
它虽然传回一个HINSTANCE,但他并不是真正的句柄,我们仅能拿它来做一些错误值检查。 
但它的功能比前两者更强盛,它执行系统的Shell命令。 



1、2中假如传入“XX.txt”,它们将不能成功执行,ShellExecute却能很好地执行,它将启动一个默认的文字处理程序来打开它。 
1、2中假如传入“www.baidu.com”,将不能成功执行,而ShellExecute却能很好地执行,它将启动一个默认浏览器来打开这个网站。 

参数讲解: 


参数1 hwnd:一窗体句柄,将作为启动的程序的父窗体。 

参数2 lpVerb:你想执行的操作(edit 、explore、find、open、print、properties),你也可以传入NULL值,它将执行默认操作(win2000以前与以后处理略有差别,请见MSDN)。


3、调用: 

HINSTANCE ShellExecute( 

HWND hwnd 

LPCTSTR lpVerb

LPCTSTR lpFile

LPCTSTR lpParameters

LPCTSTR lpDirectory

INT nShowCmd

); 

它也有WinExec同样的缺点。 
它虽然传回一个HINSTANCE,但他并不是真正的句柄,我们仅能拿它来做一些错误值检查。 
但它的功能比前两者更强盛,它执行系统的Shell命令。 


1、2中假如传入“XX.txt”,它们将不能成功执行,ShellExecute却能很好地执行,它将启动一个默认的文字处理程序来打开它。 
1、2中假如传入“www.baidu.com”,将不能成功执行,而ShellExecute却能很好地执行,它将启动一个默认浏览器来打开这个网站。 

参数讲解: 


参数1 hwnd:一窗体句柄,将作为启动的程序的父窗体。 
参数2 lpVerb:你想执行的操作(edit 、explore、find、open、print、properties),你也可以传入NULL值,它将执行默认操作(win2000以前与以后处理略有差别,请见MSDN)。

抱歉!评论已关闭.