程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Delphi中ShellExecute的妙用

Delphi中ShellExecute的妙用

編輯:.NET實例教程
  ShellExecute的功能是運行一個外部程序(或者是打開一個已注冊的文件、打開一個目錄、打印一個文件等等),並對外部程序有一定的控制。

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

開始一個新的應用程序
   ShellExecute(Handle, ''open'', PChar(''c:\test\app.exe''), nil, nil, SW_SHOW);

打開記事本,並打開一個文件(系統能識別記事本應用程序的路徑,因此我們不必使用絕對路徑)
   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暫時的被打開,但它會自動關閉。

打開一個Html頁面
   ShellExecute(Handle, ''open'', PChar(''http://www.festra.com/''), nil, nil, SW_SHOW);

你能通過一個已經注冊的文件類型來打開應用程序
   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);

 

ShellExecute詳解

ShellExecute函數用於打開或者打印一個指定的文件。指定的文件必須是可執行文件或者文檔文件。
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(參數解釋)
Hwnd
指定父窗口句柄。這個窗口接收工程產生的所有消息。例如:一個工程可以通過消息框報告錯誤。
lpOperation
以一個以null結束的字符串描述操作的執行。以下的操作字符串是有效的:

行號 參數 含義
1 “open” 函數打開由lpFile指定的文件。這個文件必須是可執行文件或者文檔文件。文件夾必須是可打開的文件夾。
2 “print” 函數打印由lpFile指定的文件。這個文件應該是文檔文件。如果指定的文件是可執行文件,函數將以open的方式打開這個文件。
3 “explore” 函數將搜索由lpFile指定的文件夾。

lpOperation參數如果為null,函數將以open的方式打開由lpFile指定的文件。
lpFile
以一個null結束的字符串描述打開或者打印指定的文件,或者打開或者搜索指定的
文件夾。函數可以打開一個指定的文件或者文件夾,也可以打印一個文檔文件。
lpParameters
如果lpFile指定的是一個可執行文件,lpParameters以一個以null結束的字符串指定該執行文件傳給應用軟件的參數。
行號 參數 含義
1 SW_HIDE 隱藏這個窗體,並激活其他窗體。
2 SW_MAXIMIZE 最大化指定的窗體。
3 SW_MINIMIZE 最小化指定的窗體,並按順序激活最上層的窗體。
4 SW_RESTORE 激活並顯示窗體。如果窗體為最小化或者最大化,窗體恢復到原始大小和位置。應用程序當恢復一個最小化的窗體時將指定標記。
5 SW_SHOW 以當前的大小和位置激活並顯示窗體。
6 SW_SHOWDEFAULT 
7 SW_SHOWMAXIMIZED 激活並最大化顯示窗體。
8 SW_SHOWMINIMIZED 激活並最小化現實窗體。
9 SW_SHOWMINNOACTIVE 最小化窗體,保持其激活狀態。
10 SW_SHOWNA 以當前狀態顯示窗體,保持其激活狀態。
11 SW_SHOWNOACTIVATE 以當前的大小和位置顯示窗體,並保持其激活狀態。
12 SW_SHOWNORMAL 激活並顯示一個窗體。如果窗體為最大化或者最小化,窗體恢復到原始的大小和位置。當窗體第一次顯示的時候,應用程序記錄標記。
如果lpFIEld指定的是一個文檔文件,lpParameters應該為null。
lpDirectory
以一個以null結束的字符串指定文件開始運行的默認目錄。
nShowCmd
如果lpFIEld指定了一個可執行文件,nShowCmd指定這個文件在被打開時如何顯示。這個參數可以是以下值中的任何一個:

如果lpFIEld指定的是文檔文件,nShowCmd應該為0。

* return Values(返回值)
如果函數執行成功,返回值是已經運行的工程的實例句柄,或者動態數據交換服務器應用程序的句柄。
(具體返回值列表從略,請參考Delphi在線幫助)
* Remarks(注釋)
被lpFile參數指定的文件必須是一個可執行文件或者文檔文件。如果文件是一個文檔文件,ShellExecute函數將根據lpOperation參數決定打開或者打印這個文件。

如果是可執行文件,ShellExecute函數將打開它,即使lpOperation參數被指定為printing。
你可以使用ShellExecute打開活著搜索一個文件夾。可以使用以下任意一種方式打開一個文件夾:
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
或者
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
使用下面的調用搜索文件夾:
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL)
如果lpOperation參數為null,函數將打開由lpFile指定的文件。如果lpOperation參數為”open”或者”explore”,函數將強制打開窗體或者資源管理器。

 

注:在新窗口打開網頁的辦法
 ShellExecute(self.Handle, PChar(''open''), PChar(''explorer''), PChar(URL), nil, SW_MAXIMIZE); 
 Q: 如何打開一個應用程序?
 ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW) ;
 或
 ShellExecute(this->m_hWnd,"open","notepad.exe",
 "c:\MyLog.log","",SW_SHOW);
 Q: 如何打開一個同系統程序相關連的文檔?
 ShellExecute(this->m_hWnd,"open",
 "c:\abc.txt","","",SW_SHOW);
 Q: 如何打開一個網頁?
 ShellExecute(this->m_hWnd,"open","
http://www.google.com";,"","",  SW_SHOW);
 Q: 如何激活相關程序,發送EMAIL?
 ShellExecute(this->m_hWnd,"open",
 "
mailto:[email protected]","","", SW_SHOW);
 Q: 如何用系統打印機打印文檔?
 ShellExecute(this->m_hWnd,"print",
 "c:\abc.txt","","", SW_HIDE);
 Q: 如何用系統查找功能來查找指定文件?
 ShellExecute(m_hWnd,"find","d:\nish",
 NULL,NULL,SW_SHOW);
 Q: 如何啟動一個程序,直到它運行結束?
 SHELLEXECUTEINFO ShExecInfo = {0};
 ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
 ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
 ShExecInfo.hwnd = NULL;
 ShExecInfo.lpVerb = NULL;
 ShExecInfo.lpFile = "c:\MyProgram.exe"; 
 ShExecInfo.lpParameters = ""; 
 ShExecInfo.lpDirectory = NULL;
 ShExecInfo.nShow = SW_SHOW;
 ShExecInfo.hInstApp = NULL; 
 ShellExecuteEx(&ShExecInfo);
 WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
 或:
 PROCESS_INFORMATION ProcessInfo; 
 STARTUPINFO StartupInfo; //入口參數
 ZeroMemory(&StartupInfo, sizeof(StartupInfo));
 StartupInfo.cb = sizeof StartupInfo ; //分配大小
 if(CreateProcess("c:\winnt\notepad.exe", NULL, 
 NULL,NULL,FALSE,0,NULL,
 NULL,&StartupInfo,&ProcessInfo))
 { 
 WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
 CloseHandle(ProcessInfo.hThread);
 CloseHandle(ProcessInfo.hProcess);
 } 
 else
 {
 MessageBox("The process could not be started...");
 }
 Q: 如何顯示文件或文件夾的屬性?
 SHELLEXECUTEINFO ShExecInfo ={0};
 ShExecInfo.cbSize = sizeof
 SHELLEXECUTEINFO);
 ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
 ShExecInfo.hwnd = NULL;
 ShExecInfo.lpVerb = "propertIEs";
 ShExecInfo.lpFile = "c:\"; //也可以是文件
 ShExecInfo.lpParameters = ""; 
 ShExecInfo.lpDirectory = NULL;
 ShExecInfo.nShow = SW_SHOW;
 ShExecInfo.hInstApp = NULL; 
 ShellExecuteEx(&ShExecInfo);

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved