用VB輕松調(diào)用其他程序
我們編寫(xiě)程序時(shí),,有時(shí)會(huì)遇到在一個(gè)程序中調(diào)用并控制另一個(gè)程序執(zhí)行的情況,,在一些編程語(yǔ)言中實(shí)現(xiàn)起來(lái)較為繁瑣,但如果用VB編寫(xiě)時(shí),,則可輕松實(shí)現(xiàn),。下面我就以在程序中調(diào)用“計(jì)算器”為例,總結(jié)了以下幾種方法: 一,、以異步方式來(lái)執(zhí)行其他程序 Shell 函數(shù)是以異步方式來(lái)調(diào)用其他程序的,。也就是說(shuō),用Shell啟動(dòng)的程序可能還沒(méi)有完成執(zhí)行過(guò)程,,就已經(jīng)執(zhí)行到 Shell 函數(shù)之后的語(yǔ)句,。 語(yǔ)法:Shell(pathname[,windowstyle]) 說(shuō)明:pathname:必要參數(shù)。Variant (String),,要執(zhí)行的程序名,,以及任何必需的參數(shù)或命令行變量,可能還包括目錄或文件夾,,以及驅(qū)動(dòng)器,。 例如:RetVal = Shell(″C:WINDOWSCALC.EXE″, 1) ′ 調(diào)用計(jì)算器。 二,、以同步方式來(lái)執(zhí)行其他程序 有時(shí)候,,我們需要讓VB在執(zhí)行完外部程序后再執(zhí)行下一語(yǔ)句,這就需要使用API函數(shù)。 我們可通過(guò)OpenProcess和CloseHandle函數(shù)來(lái)檢測(cè)調(diào)用軟件的運(yùn)行情況,。這兩個(gè)函數(shù)的聲明如下: Declare Function OpenProcess Lib ″kernel32″ Alias ″OpenProcess″ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Declare Function CloseHandle Lib ″kernel32″ Alias ″CloseHandle″ (ByVal hObject As Long) As Long 建立下面函數(shù),,用以判斷程序是否在運(yùn)行,如果是,,則在運(yùn)行時(shí)返回True,。 Function IsRunning(ByVal ProgramID) As Boolean ′傳入進(jìn)程標(biāo)識(shí)ID Dim hProgram As Long ′被檢測(cè)的程序進(jìn)程句柄 hProgram=OpenProcess(0,False,ProgramID) If Not hProgram=0 Then IsRunning=True Else IsRunning=False End If CloseHandle hProgram End Function 例如要調(diào)用計(jì)算器(CALC.EXE)并等到它運(yùn)行完成后再執(zhí)行下一語(yǔ)句,可以使用以下代碼: Dim RetVal MsgBox ″開(kāi)始運(yùn)行″ RetVal = Shell(″C:WINDOWSCALC.EXE″, 1) While IsRunning(RetVal) DoEvents Wend MsgBox ″結(jié)束運(yùn)行″ 三,、關(guān)閉正在運(yùn)行中的其他軟件 如果要在程序中關(guān)閉正在運(yùn)行中的其他程序,,可以先使用FindWindow函數(shù)找出相應(yīng)的程序句柄,然后調(diào)用PostMessage函數(shù)關(guān)閉該程序即可,。 這兩個(gè)函數(shù)的聲明如下: Declare Function FindWindow Lib ″user32″ Alias ″FindWindowA″ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function PostMessage Lib ″user32″ Alias ″PostMessageA″ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 例如要檢測(cè)“計(jì)算器”程序是否正在運(yùn)行,,如果是則關(guān)閉它,可以使用如下代碼來(lái)實(shí)現(xiàn): Dim winHwnd As Long Dim RetVal As Long winHwnd=FindWindow(vbNullString,″計(jì)算器″) If winHwnd〈〉0 Then RetVal=PostMessage(winHwnd,&H10,0&,0&) If RetVal=0 Then MsgBox ″關(guān)閉計(jì)算器出錯(cuò),!″ End If Else MsgBox ″計(jì)算器程序沒(méi)有運(yùn)行,。″ End If |
|
來(lái)自: a_cheng > 《VB學(xué)習(xí)》