原鏈接:http://www.verydemo.com/demo_c173_i86999.html
ShellExecute的功能是運行一個外部程序(或者是打開一個已注冊的文件、打開一個目錄、打印一個文件等等),並對外部程序有一定的控制。 基本簡介 有幾個API函數都可以實現這些功能,但是在大多數情況下ShellExecute是更多的被使用的,同時它並不是太復雜。 原型及參數含義 ShellExecute函數原型及參數含義如下: ShellExecute(
hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定動作, 譬如: open、print} FileName: PChar; {指定要打開的文件或程序} Parameters: PChar; {給要打開的程序指定參數; 如果打開的是文件這里應該是 nil} Directory: PChar; {缺省目錄} ShowCmd: Integer {打開選項} ): HINST; {執行成功會返回應用程序句柄; 如果這個值 <= 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; {沒有相關聯的應用程序} //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}
例子 //調用計算器 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://網站域名/網頁文件名。 如: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:who@mail.neu.edu.cn", NULL, NULL, SW_SHOWNORMAL);打開新郵件窗口,並自動填入收件人地址。若指定多個收件人地址,則收件人地址之間必須用分號或逗號分隔開(下同)。
格式三:mailto:用戶賬號@郵件服務器地址? subject=郵件主題&body=郵件正文 如:ShellExecute(handle, ‘open’, ‘ mailto:who@mail.neu.edu.cn?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相同