1. 程式人生 > 其它 >ShellExecute 啟動外部程式 引數詳細介紹

ShellExecute 啟動外部程式 引數詳細介紹

ShellExecute的功能是執行一個外部程式(或者是開啟一個已註冊的檔案、開啟一個目錄、列印一個檔案等等),並對外部程式有一定的控制。

目錄

1基本簡介

2原型引數

3返回值

4例子

5特殊用法

6VB語言

▪ 概括▪ 定義宣告▪ 引數說明▪ 示例

1基本簡介編輯

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

2原型引數編輯

注意事項:使用該函式時,需新增該標頭檔案:[1]#include <shellapi.h>

ShellExecute函式原型及引數含義如下:

ShellExecute(

hWnd: HWND; {指定父視窗控制代碼}

Operation: PChar; {指定動作, 譬如: open、runas、print、edit、explore、find[2]}

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}

3返回值編輯

執行成功會返回應用程式控制代碼

返回的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; {沒有相關聯的應用程式}

4例子編輯

//呼叫計算器

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函式的標準用法,下面將介紹它的特殊用法。

5特殊用法編輯

如果將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相同