【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、调用
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)。