dim i as long i=shell(the programme)SendMessage i, WM_CLOSE, 112, 0
请问楼上的, WM_CLOSE 是窗体程序的关闭消息,如果运行的程序没有窗体呢?
我认为正确的做法是这样的: ============================= Option Explicit Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Boolean Const PROCESS_TERMINATE = 1Private Sub Form_Load() Dim ProID As Long '''进程 PID ProID = Shell("notepad.exe", vbMaximizedFocus)'''这里用打开一个记事本来示例 Sleep 2000 Dim hProcess As Long '''进程句柄 hProcess = OpenProcess(PROCESS_TERMINATE, False, ProID) TerminateProcess hProcess, 1 '''关闭进程
CloseHandle hProcess '''释放句柄 End Sub
一个模块的代码,关记事本是没问题,自己试试看吧Attribute VB_Name = "Module1" Option Explicit Declare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const WM_CLOSE = &H10 Private Target As StringPublic Function closewin(ByVal app_hWnd As Long, ByVal param As Long) As Long Dim buf As String * 256 Dim title As String Dim length As Long '取得窗口名句柄 length = GetWindowText(app_hWnd, buf, Len(buf)) title = Left$(buf, length) '判断是否为要关闭的窗体 If InStr(title, Target) <> 0 Then ' 关闭窗体 SendMessage app_hWnd, WM_CLOSE, 0, 0 End If closewin = 1 End FunctionPublic Sub pausetask(app_name As String) Target = app_name EnumWindows AddressOf closewin, 0 End Sub
i=shell(the programme)SendMessage i, WM_CLOSE, 112, 0
=============================
Option Explicit
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Boolean
Const PROCESS_TERMINATE = 1Private Sub Form_Load()
Dim ProID As Long '''进程 PID
ProID = Shell("notepad.exe", vbMaximizedFocus)'''这里用打开一个记事本来示例
Sleep 2000 Dim hProcess As Long '''进程句柄
hProcess = OpenProcess(PROCESS_TERMINATE, False, ProID)
TerminateProcess hProcess, 1 '''关闭进程
CloseHandle hProcess '''释放句柄
End Sub
Option Explicit
Declare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE = &H10
Private Target As StringPublic Function closewin(ByVal app_hWnd As Long, ByVal param As Long) As Long
Dim buf As String * 256
Dim title As String
Dim length As Long '取得窗口名句柄
length = GetWindowText(app_hWnd, buf, Len(buf))
title = Left$(buf, length) '判断是否为要关闭的窗体
If InStr(title, Target) <> 0 Then
' 关闭窗体
SendMessage app_hWnd, WM_CLOSE, 0, 0
End If
closewin = 1
End FunctionPublic Sub pausetask(app_name As String)
Target = app_name
EnumWindows AddressOf closewin, 0
End Sub