天天看點

ShellExecute函數介紹

ShellExecute的功能是運作一個外部程式(或者是打開一個已注冊的檔案、打開一個目錄、列印一個檔案等等),并對外部程式有一定的控制。

使用該函數時,需添加該頭檔案:     #include <shellapi.h> ShellExecute函數原型及參數含義如下:    ShellExecute(       hWnd: HWND; {指定父視窗句柄}       Operation: PChar; {指定動作, 譬如: open、runas、print、edit、explore、find}       FileName: PChar; {指定要打開的檔案或程式}       Parameters: PChar; {給要打開的程式指定參數; 如果打開的是檔案這裡應該是 nil}       Directory: PChar; {預設目錄}       ShowCmd: Integer {打開選項}       ): HINST;    ShowCmd 參數可選值:SW_HIDE = 0; {隐藏}    SW_SHOWNORMAL = 1; {用最近的大小和位置顯示, 激活}    SW_NORMAL = 1; {同 SW_SHOWNORMAL}    SW_SHOWMINIMIZED = 2; {最小化, 激活}    SW_SHOWMAXIMIZED = 3; {最大化, 激活}    SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}    SW_SHOWNOACTIVATE = 4; {用最近的大小和位置顯示, 不激活}    SW_SHOW = 5; {同 SW_SHOWNORMAL}    SW_MINIMIZE = 6; {最小化, 不激活}    SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}    SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}    SW_RESTORE = 9; {同 SW_SHOWNORMAL}    SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}    SW_MAX = 10; {同 SW_SHOWNORMAL}    執行成功會傳回 應用程式 句柄    傳回的HINSTANCE可以将它轉換為一個整數(%d),并比較它的值大于還是小于32或比較它的錯誤代碼    傳回值大于32表示執行成功    傳回值小于32表示執行錯誤    傳回值可能的錯誤有: = 0 { 記憶體不足 }    ERROR_FILE_NOT_FOUND = 2; {檔案名錯誤}    ERROR_PATH_NOT_FOUND = 3; {路徑名錯誤}    ERROR_BAD_FORMAT = 11; {EXE 檔案無效}    SE_ERR_SHARE = 26; {發生共享錯誤}    SE_ERR_ASSOCINCOMPLETE = 27; {檔案名不完全或無效}    SE_ERR_DDETIMEOUT = 28; {逾時}    SE_ERR_DDEFAIL = 29; {DDE 事務失敗}    SE_ERR_DDEBUSY = 30; {正在處理其他 DDE 事務而不能完成該 DDE 事務}    SE_ERR_NOASSOC = 31; {沒有相關聯的 應用程式 }   調用電腦    ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL); 調用 記事本    ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);    ●hWnd:用于指定父 視窗句柄 。當 函數調用 過程出現錯誤時,它将作為Windows消息視窗的父視窗。例如,可以将其設定為            應用程式 主 視窗句柄 ,即Application.Handle,也可以将其設定為 桌面 視窗句柄(用GetDesktopWindow函數獲得)。    ●Operation:用于指定要進行的操作。其中“open”操作表示執行由FileName參數指定的程式,或打開由FileName參數指定的            檔案或檔案夾;“print”操作表示列印由FileName參數指定的檔案;“explore”操作表示浏覽由FileName參數指定的            檔案夾。當參數設為nil時,表示執行預設操作“open”。    ●FileName:用于指定要打開的檔案名、要執行的程式檔案名或要浏覽的檔案夾名。    ●Parameters:若FileName參數是一個可執行程式,則此參數指定 指令行參數 ,否則此參數應為nil或PChar(0)。    ●Directory:用于指定預設目錄。    ●ShowCmd:若FileName參數是一個可執行程式,則此參數指定程式視窗的初始顯示方式,否則此參數應設定為0。    若ShellExecute 函數調用 成功,則傳回值為被執行程式的執行個體句柄。若傳回值小于32,則表示出現錯誤。    上述僅僅是ShellExecute函數的标準用法,下面将介紹它的特殊用法。   如果将FileName參數設定為“http:”協定格式,那麼該函數将打開預設 浏覽器 并連結到指定的URL位址。若使用者機器中安裝了多個 浏覽器 ,則該函數将根據Windows 9x/NT系統資料庫中http協定處理程式(Protocols Handler)的設定确定啟動哪個浏覽器。    格式一:http://網站域名         如:ShellExecute(Handle, "open", "http: www.neu.edu.cn", NULL, NULL, SW_SHOWNORMAL);    格式二:http://網站域名/網頁檔案名         如:ShellExecute(Handle, "open"," http:// www.neu.edu.cn/default.htm",NULL,NULL, SW_SHOWNORMAL); 如果将FileName參數設定為“mailto:”協定格式,那麼該函數将啟動預設郵件客戶程式,如Microsoft Outlook(也包括Microsoft Outlook Express)或Netscape Messanger。若使用者機器中安裝了多個郵件客戶程式,則該函數将根據Windows 9x/NT系統資料庫中mailto協定處理程式的設定确定啟動哪個郵件客戶程式。    格式一:mailto         如:ShellExecute(Handle,"open", "mailto:", NULL, NULL, SW_SHOWNORMAL);打開新郵件視窗。    格式二:mailto:使用者賬号@郵件伺服器位址         如:ShellExecute(Handle, "open"," mailto:[email protected]", NULL, NULL, SW_SHOWNORMAL);打開新郵件視窗,             并自動填入收件人位址。若指定多個收件人位址,則收件人位址之間必須用分号或逗号分隔開(下同)。    格式三:mailto:使用者賬号@郵件伺服器位址         subject=郵件主題&body=郵件正文         如:ShellExecute(handle, ‘open’, ‘ mailto:[email protected]?subject=Hello&Body=This is a test’,             NULL, NULL, SW_SHOWNORMAL);打開新郵件視窗,并自動填入收件人位址、郵件主題和郵件正文。若郵件正文包括多行             文本,則必須在每行文本之間加入換行 轉義字元 %0a。         例子(delphi):         在一個 應用程式 調用c:\Project1.exe;         ShellExecute(handle, 'open',"c:\Project1.exe",'字串内容',NULL, SW_SHOWNORMAL);         在Project1.exe裡可以調用:         procedure TForm1.FormCreate(Sender: TObject);         var i:integer;         begin         for i:=1 to paramcount do         if ParamStr(i)<>'' then showmessage(ParamStr(i));         end;    最後的那個參數,為視窗指定可視性方面的一個指令。    請用下述任何一個常數    SW_HIDE 隐藏視窗,活動狀态給另一個視窗    SW_MINIMIZE 最小化視窗,活動狀态給另一個視窗    SW_RESTORE 用原來的大小和位置顯示一個視窗,同時令其進入活動狀态    SW_SHOW 用目前的大小和位置顯示一個視窗,同時令其進入活動狀态    SW_SHOWMAXIMIZED 最大化視窗,并将其激活    SW_SHOWMINIMIZED 最小化視窗,并将其激活    SW_SHOWMINNOACTIVE 最小化一個視窗,同時不改變 活動視窗    SW_SHOWNA 用目前的大小和位置顯示一個視窗,不改變 活動視窗    SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個視窗,同時不改變 活動視窗    SW_SHOWNORMAL 與SW_RESTORE相同

繼續閱讀