在MFC里要开启外部程式有三个API可以用,Shellexecute()被运用的机率比较高,主要是它可以控制的参数也比较多。
1. Shellexecute() 函数原型
HINSTANCE ShellExecute( HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd );
hwnd | 所掌控的window handle,一般设为NULL |
lpOperation | 档案执行的方式,如"open","print","explore"分别对应 "开启","列印","浏览", 若不设定,则表示以预设值为主。 |
lpFile | 所要执行的档案名称 |
lpParameters | 指定给lpFile档案所需的参数 |
lpDirectory | lpFile档案目录 |
nShowCmd | 档案显示方式,可设定如下参数: |
SW_HIDE | 隐藏 |
SW_MAXIMIZE | 最大化 |
SW_MINIMIZE | 最小化,并把Z order顺序在此视窗之后(即视窗下一层)的视窗启动 |
SW_RESTORE | 启动视窗并还原为初始化大小 |
SW_SHOW | 以当前大小和状态启动视窗 |
SW_SHOWDEFAULT | 以预设方式运行 |
SW_SHOWMAXIMIZED | 启动视窗并最大化 |
SW_SHOWMINIMIZED | 启动视窗并最小化 |
SW_SHOWMINNOACTIVE | 最小化但不改变当前启动的视窗 |
SW_SHOWNA | 以当前状态显示视窗但不改变当前启动的视窗 |
SW_SHOWNOACTIVATE | 以初始化大小显示视窗但不改变当前启动的视窗 |
SW_SHOWNORMAL | 启动并显示视窗,如果是最大(小)化,视窗将会还原。第一次运行程式 时应该使用这个值 |
范例:
开启DOS console mode,并显示目录:
ShellExecute(handle, NULL, "cmd.exe", "/k dir", NULL, SW_SHOW);
2. WinExec()
UINT WINAPI WinExec( __in LPCSTR lpCmdLine, __in UINT uCmdShow);
lpCmdLine [in] : 所要执行的命令,若只有档名没有目录,系统将依以下顺序搜寻档案: 1. 依开启的程式而定 2. 目前的目录 3. 系统目录 4. Windows目录 5. PATH环境变数所设定的目录 uCmdShow [in] : 档案显示方式,参数可参考ShellExecute()相同。
范例:
开启DOS console mode,并显示目录:
WinExec("cmd.exe /k dir", SW_SHOW);
在使用上,以ShellExecute()较好用。个人在使用中有遇到,在unicode的状态下,WinExec()有字串转换的问题。