天天看點

ShellExecute

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

有幾個API函數都可以實作這些功能,但是在大多數情況下ShellExecute是更多的被使用的,同時它并不是太複雜。

ShellExecute函數原型及參數含義如下: 

ShellExecute( 

HWND hwnd, //父視窗句柄 (如:NULL,Handle等)

LPCSTR lpOperation, //操作類型 (如:"open")*要加英文雙引号

LPCSTR lpFile, //要進行操作的檔案或路徑 

LPCSTR lpParameters, //當lpOperation為“explore”時指定要傳遞的參數,通常設為NULL 

LPCSTR lpDirectory, //指定預設目錄,通常設為NULL 

INT nShowCmd //檔案打開的方式,以通常方式還是最大化或最小化顯示,一般為SW_SHOWNORMAL 

例子如下: 

//調用電腦 

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函數的标準用法,下面将介紹它的特殊用法。 

2.特殊用法 

如果将FileName參數設定為“http:”協定格式,那麼該函數将打開預設浏覽器并連結 到指定的URL位址。若使用者機器中安裝了多個浏覽器,則該函數将根據Windows 9x/NT系統資料庫中http協定處理程式(Protocols Handler)的設定确定啟動哪個浏覽器。 

格式一:http://網站域名。 

如:ShellExecute(Handle, "open", http:// ; 

www.neu.edu.cn’, NULL, NULL, SW_SHOWNORMAL); 

格式二: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’, nil, nil, SW_SHOWNORMAL);打開新郵件視窗,并自動填入收件人位址、郵件主題和郵件正文。若郵件正文包括多行文本,則必須在每行文本之間加入換行轉義 字元%0a。 

例子(delphi): 

在一個應用程式調用c:\Project1.exe; 

ShellExecute(handle, 'open','c:\Project1.exe','字串内容',nil, 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相同

繼續閱讀