Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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
Private Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
'Constants that are used by the API
Const WM_CLOSE = &H10
Const INFINITE = &HFFFFFFFF
Const SYNCHRONIZE = &H100000
Private Sub CloseWindows(ByVal Name As String)
Dim hWindow As Long
Dim hThread As Long
Dim hProcess As Long
Dim lProcessId As Long
Dim lngResult As Long
Dim lngReturnValue As Long
Do
hWindow = FindWindow(vbNullString, Name)
If hWindow <> 0 Then
hThread = GetWindowThreadProcessId(hWindow, lProcessId)
hProcess = OpenProcess(SYNCHRONIZE, 0&, lProcessId)
lngReturnValue = PostMessage(hWindow, WM_CLOSE, 0&, 0&)
lngResult = WaitForSingleObject(hProcess, INFINITE)
End If
DoEvents
Loop Until hWindow = 0
End Sub
'注:CloseWindows用来遍历进程并关闭,参数为进程名
这个不用判断吧。你直接把关闭代码写到timer事件里面,每隔五秒执行一次。有就关掉,没有也没什么关系。不用判断的,,,
Private Sub Timer1_Timer()
Call Shell("cmd.exe /c taskkill /im qq.exe /f", vbHide)
End Sub
干嘛要遍历?用FindWindow 不就完了?
鉴于不是做好事,别的就不多说了。
没那本事啊,就别充高手搞什么恶作剧骗别人。