在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()有字串轉換的問題。