1. 如何用VB調用一個外部EXE程序
使用Shell函數函數。
2. 如何在VB中怎樣運行外部程序
Visual Basic 語言參考
Shell 函數
運行一個可執行程序,並且如果該程序仍然在運行,則返回一個包含該程序的進程 ID 的整數。
Public Function Shell( _
ByVal Pathname As String, _
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _
Optional ByVal Wait As Boolean = False, _
Optional ByVal Timeout As Integer = -1 _
) As Integer
參數
Pathname
必選項。字元串。要執行的程序名以及任何需要的參數和命令行開關。Pathname 還可以包括驅動器和目錄路徑或文件夾。
Style
可選項。AppWinStyle。從 AppWinStyle 枚舉中選擇的值,該枚舉與要在其中運行程序的窗口樣式相對應。如果省略 Style,則 Shell 使用 AppWinStyle.MinimizedFocus,這將使程序以最小化啟動並具有焦點。
Style 參數可以有以下設置之一:
枚舉值 說明
AppWinStyle.Hide 隱藏窗口並為隱藏的窗口提供焦點。
AppWinStyle.NormalFocus 為窗口提供焦點,並以最近的大小和位置顯示窗口。
AppWinStyle.MinimizedFocus 為窗口提供焦點,並以圖標的形式顯示窗口。
AppWinStyle.MaximizedFocus 為窗口提供焦點,並以全屏方式顯示窗口。
AppWinStyle.NormalNoFocus 將窗口設置為最近的大小和位置。當前活動窗口保持焦點。
AppWinStyle.MinimizedNoFocus 以圖標的形式顯示窗口。當前活動窗口保持焦點。
Wait
可選項。Boolean。指示 Shell 函數是否應等待程序完成的值。如果省略 Wait,則 Shell 使用 False。
Timeout
可選項。Integer。Wait 為 True 時等待完成的毫秒數。如果省略 Timeout,則 Shell 使用 -1,表示沒有超時,Shell 直到程序完成時才返回。因此,如果省略 Timeout 或將它設置為 -1,則 Shell 可能永遠不會將控制返回給程序。
異常/錯誤
異常類型 錯誤號 條件
ArgumentException 5 Style 不在 0 到 9(包含 0 和 9)范圍內。
FileNotFoundException 53 Shell 無法啟動指定的程序。
備注
Shell 函數的返回值取決於 Pathname 中指定的程序在 Shell 返回時是否仍在執行。如果將 Wait 設置為 True 並且程序在超時過期前結束,Shell 返回零。如果超時過期或者省略 Wait 或將它設置為 False,則 Shell 返回程序的進程 ID。進程 ID 是標識正在運行的程序的唯一數字。
如果 Shell 函數無法啟動指定的程序,則出現 System.IO.FileNotFoundException 錯誤。例如,當試圖從使用 System.Windows.Forms 的應用程序運行 16 位程序(如 command.com)時,可能會發生這種情況。解決辦法是運行將調用所需的 16 位程序的 32 位程序。如果是 command.com,則可以將運行 cmd.exe 作為另一種選擇。
默認情況下,Shell 函數非同步運行程序。這意味著用 Shell 函數啟動的程序在 Shell 函數後面的語句執行前可能沒有結束執行。如果想等待程序結束後再繼續,請將 Wait 設置為 True。
整個路徑和文件規范應該始終用引號引起來,如以下示例所示:
ID = Shell("""C:\Program Files\MyFile.exe"" -a -q", , True, 100000)
字元串內每對相鄰的雙引號 ("") 被解釋為字元串中的一個雙引號字元。因此,前面的示例表示 Shell 函數的下列字元串:
"C:\Program Files\MyFile.exe" -a -q
如果路徑沒有用引號引起來,Windows 就會在 C:\ 目錄中查找名為 Program.exe 的文件,而不是在 C:\Program Files 目錄中查找 MyFile.exe 文件。
安全說明 如果路徑和文件規范沒有用引號引起來,那麼當文件名或路徑節點包含空格時,就會出現安全風險。在上面的示例中,路徑節點 \Program Files 包含一個空格。如果規范不在引號中,並且名為 Program.exe 的程序(例如通過非法的破壞)安裝在 C:\ 中,Windows 就會執行 Program.exe 程序而不是 MyFile.exe。
安全說明 Shell 函數需要非託管代碼許可權,這可能會對它在部分信任情況下的執行產生影響。有關更多信息,請參見 SecurityPermission 類和代碼訪問許可權。
示例
本示例使用 Shell 函數運行一個用戶指定的應用程序。通過將 AppWinStyle.NormalFocus 指定為第二個參數,以正常大小打開應用程序並為它提供焦點。
Dim ProcID As Integer
' Run Calculator.
ProcID = Shell("C:\Windows\system32\calc.exe", AppWinStyle.NormalFocus)
' The preceding path is for Windows XP;
' The Windows 2000 path is C:\WINNT\system32\calc.exe.