2011年5月8日 星期日

ShellExecute

ShellExecute
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還能識別其他協議,象FTPGOPHER。甚至識別“mailto,如果檔案名指向“mailtoYun_Yue@intra.asus.com,它將啟動電子郵件程式(Windows OutLook)並打開一個新的待編輯郵件.
例:打開一封新郵件,新郵件的收件人為:Yun_Yue@intra.asus.com.
    ShellExecute(Handle,'open','mailtoYun_Yue@intra.asus.com',nil,nil,SW_SHOWNORMAL);
    當然,還可以指定多個收件人:

    ShellExecute(Handle,'open','mailtoYun_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);

沒有留言:

張貼留言