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相同