ShellExecute的功能是運行一個外部程序(或者是打開一個已注冊的文件、打開一個目錄、打印一個文件等等),并對外部程序有一定的控制。
有幾個API函數(shù)都可以實現(xiàn)這些功能,但是在大多數(shù)情況下ShellExecute是更多的被使用的,同時它并不是太復(fù)雜。下面舉例說明它的用法。
開始一個新的應(yīng)用程序
ShellExecute(Handle, ‘open‘, PChar(‘c:\test\app.exe‘), nil, nil, SW_SHOW);
打開記事本,并打開一個文件(系統(tǒng)能識別記事本應(yīng)用程序的路徑,因此我們不必使用絕對路徑)
ShellExecute(Handle, ‘open‘, PChar(‘notepad‘), PChar(‘c:\test\readme.txt‘), nil, SW_SHOW);
打印一個文檔
ShellExecute(Handle, ‘print‘, PChar(‘c:\test\test.doc‘), nil, nil, SW_SHOW);
注意:可能你會看到word暫時的被打開,但它會自動關(guān)閉。
打開一個HTML頁面
ShellExecute(Handle, ‘open‘, PChar(‘http://www./‘), nil, nil, SW_SHOW);
你能通過一個已經(jīng)注冊的文件類型來打開應(yīng)用程序
ShellExecute(Handle, ‘open‘, PChar(‘c:\test\readme.txt‘), nil, nil, SW_SHOW);
用windows Explorer 打開一個目錄
ShellExecute(Handle, ‘explore‘, PChar(‘c:\windows)‘, nil, nil, SW_SHOW);
運行一個DOS命令并立即返回
ShellExecute(Handle, ‘open‘, PChar(‘command.com‘), PChar(‘/c copy file1.txt file2.txt‘), nil, SW_SHOW);
運行一個DOS命令并保持DOS窗口存在
ShellExecute(Handle, ‘open‘, PChar(‘command.com‘), PChar(‘/k dir‘), nil, SW_SHOW);
Delphi ShellExecute幫助翻譯 [原]
hunterfall
11:31 AM
ShellExecute
ShellExecute函數(shù)用于打開或者打印一個指定的文件。指定的文件必須是可執(zhí)行文件或者文檔文件。
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
)
* Params(參數(shù)解釋)
Hwnd
指定父窗口句柄。這個窗口接收工程產(chǎn)生的所有消息。例如:一個工程可以通過消息框報告錯誤。
lpOperation
以一個以null結(jié)束的字符串描述操作的執(zhí)行。以下的操作字符串是有效的:
行號 參數(shù) 含義
1 “open” 函數(shù)打開由lpFile指定的文件。這個文件必須是可執(zhí)行文件或者文檔文件。文件夾必須是可打開的文件夾。
2 “print” 函數(shù)打印由lpFile指定的文件。這個文件應(yīng)該是文檔文件。如果指定的文件是可執(zhí)行文件,函數(shù)將以open的方式打開這個文件。
3 “explore” 函數(shù)將搜索由lpFile指定的文件夾。
lpOperation參數(shù)如果為null,函數(shù)將以open的方式打開由lpFile指定的文件。
lpFile
以一個null結(jié)束的字符串描述打開或者打印指定的文件,或者打開或者搜索指定的
文件夾。函數(shù)可以打開一個指定的文件或者文件夾,也可以打印一個文檔文件。
lpParameters
如果lpFile指定的是一個可執(zhí)行文件,lpParameters以一個以null結(jié)束的字符串指定該執(zhí)行文件傳給應(yīng)用軟件的參數(shù)。
行號 參數(shù) 含義
1 SW_HIDE 隱藏這個窗體,并激活其他窗體。
2 SW_MAXIMIZE 最大化指定的窗體。
3 SW_MINIMIZE 最小化指定的窗體,并按順序激活最上層的窗體。
4 SW_RESTORE 激活并顯示窗體。如果窗體為最小化或者最大化,窗體恢復(fù)到原始大小和位置。應(yīng)用程序當恢復(fù)一個最小化的窗體時將指定標記。
5 SW_SHOW 以當前的大小和位置激活并顯示窗體。
6 SW_SHOWDEFAULT
7 SW_SHOWMAXIMIZED 激活并最大化顯示窗體。
8 SW_SHOWMINIMIZED 激活并最小化現(xiàn)實窗體。
9 SW_SHOWMINNOACTIVE 最小化窗體,保持其激活狀態(tài)。
10 SW_SHOWNA 以當前狀態(tài)顯示窗體,保持其激活狀態(tài)。
11 SW_SHOWNOACTIVATE 以當前的大小和位置顯示窗體,并保持其激活狀態(tài)。
12 SW_SHOWNORMAL 激活并顯示一個窗體。如果窗體為最大化或者最小化,窗體恢復(fù)到原始的大小和位置。當窗體第一次顯示的時候,應(yīng)用程序記錄標記。
如果lpField指定的是一個文檔文件,lpParameters應(yīng)該為null。
lpDirectory
以一個以null結(jié)束的字符串指定文件開始運行的默認目錄。
nShowCmd
如果lpField指定了一個可執(zhí)行文件,nShowCmd指定這個文件在被打開時如何顯示。這個參數(shù)可以是以下值中的任何一個:
如果lpField指定的是文檔文件,nShowCmd應(yīng)該為0。
* return Values(返回值)
如果函數(shù)執(zhí)行成功,返回值是已經(jīng)運行的工程的實例句柄,或者動態(tài)數(shù)據(jù)交換服務(wù)器應(yīng)用程序的句柄。
(具體返回值列表從略,請參考Delphi在線幫助)
* Remarks(注釋)
被lpFile參數(shù)指定的文件必須是一個可執(zhí)行文件或者文檔文件。如果文件是一個文檔文件,ShellExecute函數(shù)將根據(jù)lpOperation參數(shù)決定打開或者打印這個文件。如果是可執(zhí)行文件,ShellExecute函數(shù)將打開它,即使lpOperation參數(shù)被指定為printing。
你可以使用ShellExecute打開活著搜索一個文件夾??梢允褂靡韵氯我庖环N方式打開一個文件夾:
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
或者
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
使用下面的調(diào)用搜索文件夾:
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL)
如果lpOperation參數(shù)為null,函數(shù)將打開由lpFile指定的文件。如果lpOperation參數(shù)為”open”或者”explore”,函數(shù)將強制打開窗體或者資源管理器。
Top
希望高手們粘貼一些馬上能用的代碼,也好辨別真?zhèn)危?
例如具體調(diào)用的時候,該給那些參數(shù)?如果改變謝謝調(diào)用參數(shù),將會造成什么后果?等等。
且看上面某個轉(zhuǎn)帖中的一個例子:
ShellExecute(Handle, ‘open‘, PChar(‘command.com‘), PChar(‘/c copy file1.txt file2.txt‘), nil, SW_SHOW);
這句話,我放在一個簡單對話框程序的OK按鈕的響應(yīng)函數(shù)里面,一編譯,出現(xiàn)5個錯誤:
C:\Documents and Settings\Administrator\桌面\openword\openwordDlg.cpp(231) : error C2065: ‘Handle‘ : undeclared identifier
C:\Documents and Settings\Administrator\桌面\openword\openwordDlg.cpp(231) : error C2065: ‘PChar‘ : undeclared identifier
C:\Documents and Settings\Administrator\桌面\openword\openwordDlg.cpp(231) : error C2015: too many characters in constant
C:\Documents and Settings\Administrator\桌面\openword\openwordDlg.cpp(231) : error C2015: too many characters in constant
C:\Documents and Settings\Administrator\桌面\openword\openwordDlg.cpp(231) : error C2065: ‘nil‘ : undeclared identifier
我雖然初學(xué)Vc,發(fā)帖子是向大家學(xué)習(xí)的,但我絕對不想以訛傳訛。因此,我雖然感謝每一位關(guān)注此貼的朋友,但是對于只是一位轉(zhuǎn)帖而不經(jīng)過自己親手驗證的朋友發(fā)出呼吁:能否發(fā)一些自己認為是正確的代碼?