在進行VB編程過程中,有時需要通過程序控制終止某些程序。在實踐中可以使用一下一些方法:
1。使用SendMessage
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
hwnd 為需要關(guān)閉的窗口程序的窗口句柄;
發(fā)送的消息可以用兩種選擇1,wMsg為WM_CLOSE,wParam,lParam為0;2,wMsg為WM_SYSCOMMAND,wParam為CS_CLOSE,lParam為0。
2。使用TerminateProcess
Private Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
hProcess 為指定要中斷的一個進程的句柄 ;
uExitCode 進程的一個退出代碼
3。使用CloseWindow
Private Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long
hwnd為想要關(guān)閉窗口的句柄。
4。如果要關(guān)閉所有的窗口可以使用BroadcastSystemMessage
Private Declare Function BroadcastSystemMessage Lib "user32" Alias "BroadcastSystemMessage" (ByVal dw As Long, pdw As Long, ByVal un As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
dw 為下述常數(shù)的一個或多個; BSF_FLUSHDISK 每次處理完一條消息后,都對磁盤進行刷新(將未存盤的數(shù)據(jù)存下來 BSF_FORCEIFHUNG 如目標處于掛起狀態(tài),則在設(shè)定的超時后到期返回 BSF_IGNORECURRENTTASK 發(fā)送任務(wù)不接收消息 BSF_LPARAMBUFFER
pdw 為下述常數(shù)的一個或多個; BSF_ALLCOMPONENTS 消息進入能夠接收消息的每一個系統(tǒng)組件 BSF_APPLICATIONS 消息到達應(yīng)用程序 BSF_INSTALLABLEDRIVERS 消息到達可安裝的驅(qū)動程序 BSF_NETDRIVERS 消息到達網(wǎng)絡(luò)驅(qū)動程序 BSF_VXDS 消息到達系統(tǒng)設(shè)備驅(qū)動程序
un 為消息編號;
消息和使用SendMessage時相同。
5。使用ExitWindowsEx關(guān)閉所有程序
Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
將uFlags 設(shè)置為EWX_FORCE強迫中止沒有響應(yīng)的進程。
dwReserved 為0
注意!由于以下原因?qū)е虏荒荜P(guān)閉程序。
1。在NT/2000/XP的系統(tǒng)中,進程句柄需要有PROCESS_TERMINATE的訪問權(quán)限才能被殺掉。
2。如果要關(guān)閉的進程正處于Kernal-Mode,那么TerminateProcess函數(shù)就會不起作用。
|