ShellExecute的功能是運行一個外部程式(或者打開一個已注冊的檔,打開一個目錄,列印一個檔等等,並對外部程式有一定額控制).
函數原型:
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
ShellExecute函數為打開或列印指定的文件。該文件可以是一個可執行文件或文檔文件。見 ShellExecuteEx。
參數說明:
hwnd:用於指定父視窗控制碼。當函數調用過程出現錯誤時,它將作為Windows消息視窗的父視窗。
lpOperation:用於指定要進行的操作。
"open"操作表示執行由lpFile參數指定的程式,或打開由lpFile參數指定的檔或文件夾;
"print"操作表示列印由lpFile參數指定的檔;
"explore"操作表示流覽由lpFile參數指定的檔夾。
當參數設為NULL時,表示執行默認操作“open”。
lpFile:用於指定要打開的檔案名、要執行的程式檔案名或要流覽的檔夾名。
lpParameters:若lpFile參數是一個可執行程式,則此參數指定命令行參數,否則此參數應為NULL.
lpDirectory:用於指定默認目錄.
nShowCmd:若lpFile參數是一個可執行程式,則此參數指定程式視窗的初始顯示方式,否則此參數應設置為0。
這個參數常用的常數:
SW_HIDE 隱藏視窗,活動狀態給令一個視窗
SW_MINIMIZE 最小化視窗,活動狀態給令一個視窗
SW_RESTORE 用原來的大小和位置顯示一個視窗,同時令其進入活動狀態
SW_SHOW 用當前的大小和位置顯示一個視窗,同時令其進入活動狀態
SW_SHOWMAXIMIZED 最大化視窗,並將其啟動
SW_SHOWMINIMIZED 最小化窗口,並將其啟動
SW_SHOWMINNOACTIVE 最小化一個視窗,同時不改變活動視窗
SW_SHOWNA 用當前的大小和位置顯示一個視窗,不改變活動視窗
SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個視窗,同時不改變活動視窗
SW_SHOWNORMAL 與SW_RESTORE相同
若ShellExecute函數調用成功,則返回值為被執行程式的實例控制碼。若返回值小於32,則表示出現錯誤
用法:
1.這個函數能打開任何檔,甚至是桌面和URL快捷方式( .ink或 .url)。ShellExecute解析系統註冊表HKEY_CLASSES_ROOT中所有的內容,判斷啟動那一個執行程式,並且啟動一個新的實例或使用DDE將檔案名連到一打開的實例。然後,ShellExecute 返回打開檔的應用的實例控制碼。
例:打開一個叫iloveu.bmp的點陣圖檔。
ShellExecute(Handle,'open','c:\iloveu.bmp',nil,nil,SW_SHOWNORMAL);
2.打開Web頁面。當ShellExecute遇到檔案名前面的“http:”時,可以判斷出要打開的檔是Web檔,隨之啟動Internet Explorer 或者 Netscape Navigator 或者任何你使用的別的流覽器打開檔。
例:打開網頁:http://hi.baidu.com/yueyun889
ShellExecute(Handle,'open','http://hi.baidu.com/yueyun889',nil,nil,SW_SHOWNORMAL);
3.ShellExecute還能識別其他協議,象FTP、GOPHER。甚至識別“mailto,如果檔案名指向“mailto:Yun_Yue@intra.asus.com”,它將啟動電子郵件程式(Windows OutLook等)並打開一個新的待編輯郵件.
例:打開一封新郵件,新郵件的收件人為:Yun_Yue@intra.asus.com.
ShellExecute(Handle,'open','mailto:Yun_Yue@intra.asus.com',nil,nil,SW_SHOWNORMAL);
當然,還可以指定多個收件人:
ShellExecute(Handle,'open','mailto:Yun_Yue@intra.asus.com;Allen_Niu@intra.asus.com',nil,nil,SW_SHOWNORMAL);
4.打開一個新的應用程式:
ShellExecute(Handle, 'open', PChar('c:\test\app.exe'), nil, nil, SW_SHOW);
5.列印記事本,並打開一個檔(系統能識別記事本應該程式的路徑,因此不需要使用絕對路徑)
ShellExecute(Handle, 'print', PChar('c:\test\test.doc'), nil, nil, SW_SHOW);
注意:可能你會看到Word暫時的被打開,但它會自動關閉
6.用Windows Explorer 打開一個目錄
ShellExecute(Handle, 'explore', PChar('c:\windows'), nil, nil, SW_SHOW);
7.運新一個DOS命令並立即返回
ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c copy file1.txt file2.txt'), nil, SW_SHOW);
8.執行一個DOS命令並保持DOS窗口存在
ShellExecute(Handle, 'open', PChar('command.com'), '/k dir', nil, SW_SHOW);
沒有留言:
張貼留言