WinExec、ShellExecute用法詳解

1、WinExec():

  WinExec主要運行EXE文件,不能運行其他類型的文件,不用引用特別單元。原型是:

UINT WinExec(exePath,ShowCmd)

  參數說明: 

  --xePath:命令行參數。注意,要用pChar轉化一下。

  --ShowCmd:外部程序的運行方式。其取值如下: 

  ----SW_HIDE 隱藏 

  ----SW_MAXIMIZE 最大化 

  ----SW_MINIMIZE 最小化,並把Z order順序在此窗口之後(即窗口下一層)的窗口激活 

  ----SW_RESTORE 激活窗口並還原爲初始化大小 SW_SHOW 以當前大小和狀態激活窗口 

  ----SW_SHOW 用當前的大小和位置顯示一個窗口,同時令其進入活動狀態 

  ----SW_SHOWDEFAULT 以默認方式運行

  ----SW_SHOWMAXIMIZED 激活窗口並最大化 

  ----SW_SHOWMINIMIZED 激活窗口並最小化 

  ----SW_SHOWMINNOACTIVE 最小化但不改變當前激活的窗口 

  ----SW_SHOWNA 以當前狀態顯示窗口但不改變當前激活的窗口 

  ----SW_SHOWNOACTIVATE 以初始化大小顯示窗口但不改變當前激活的窗口 

  ----SW_SHOWNORMAL 激活並顯示窗口,如果是最大(小)化,窗口將會還原。第一次運行程序 時應該使用這個值 

  如果調用成功,這個函數會返回一個不小於31的值,否則調用失敗,其返回值的意義如下:

  --0 系統內存或資源不足 

  --ERROR_BAD_FORMAT .EXE文件格式無效(比如不是32位應用程序) 

  --ERROR_FILE_NOT_FOUND 指定的文件設有找到

  --ERROR_PATH_NOT_FOUND 指定的路徑沒有找到

         示例,我想要用記事本打開"C:\HDC.TXT",以正常方式運行:

WinExec(pChar('notepad.exe C:\HDC.TXT'),SW_SHOWNORMAL); 

  這個函數和system()非常類似,只能運行.EXE文件,這樣在WINDOWS中有它不盡人意的地方,比如不能用此方法通過關聯的方法打開文件,例如WinExec("1.html",SW_SHOWNA);就不能打開此文檔。

 

2、ShellExecute() :

  不僅可以運行EXE文件,也可以運行系統已經關聯的文件。這個函數和WIN9X中的命令行命令"start"類似,不僅可以對文件進行操作,還可以對HTTP、MAILTO等進行操作。這樣我們可以設計有超級鏈接風格的程序了。ShellExecute的功能要強得多,並且可以完全替代WinExec(),事實上,WinExec()也是爲了和以前版本兼容而保留,所以,我們要儘量使用ShellExecute()。

  首先必須引用shellapi.pas單元:uses ShellAPI; 函數原型:

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall; 

參數含義如下: 

--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。 

  ----SW_HIDE 隱藏 

  ----SW_MAXIMIZE 最大化 

  ----SW_MINIMIZE 最小化,並把Z order順序在此窗口之後(即窗口下一層)的窗口激活 

  ----SW_RESTORE 激活窗口並還原爲初始化大小 SW_SHOW 以當前大小和狀態激活窗口 

  ----SW_SHOW 用當前的大小和位置顯示一個窗口,同時令其進入活動狀態 

  ----SW_SHOWDEFAULT 以默認方式運行

  ----SW_SHOWMAXIMIZED 激活窗口並最大化 

  ----SW_SHOWMINIMIZED 激活窗口並最小化 

  ----SW_SHOWMINNOACTIVE 最小化但不改變當前激活的窗口 

  ----SW_SHOWNA 以當前狀態顯示窗口但不改變當前激活的窗口 

  ----SW_SHOWNOACTIVATE 以初始化大小顯示窗口但不改變當前激活的窗口 

  ----SW_SHOWNORMAL 激活並顯示窗口,如果是最大(小)化,窗口將會還原。第一次運行程序 時應該使用這個值 

  若ShellExecute函數調用成功,則返回值爲被執行程序的實例句柄。若返回值小於32,則表示出現錯誤。  剛纔的例子:

WinExec(pChar('notepad.exe C:\HDC.TXT'),SW_SHOWNORMAL); 

就可以改變爲(假設窗口的句柄爲Handle) 

ShellExecute(Handle,'open','notepad','c:\taoyoyo.txt','',SW_SHOWNORMAL); 

 此外,還可以不用那麼複雜,因爲.TXT的關聯程序就是記事本,所以只要這樣就可以了:

ShellExecute(Handle,'','c:\taoyoyo.txt','','',SW_SHOWNORMAL); 

整理自:https://www.cnblogs.com/semth/p/10494685.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章