你可以使用API函数FindWindow和PostMessage去寻找指定的窗口,并关闭它。下面的例子教给你怎样找到并关掉一个Caption为“Caluclator”的程序。Dim winHwnd As LongDim RetVal As LongwinHwnd = FindWindow(vbNullString, "Calculator")Debug.Print winHwndIf winHwnd <> 0 ThenRetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)If RetVal = 0 ThenMsgBox "置入消息错误!"End IfElseMsgBox "Calculator没有打开!"End If 为了让以上的代码工作,你必须在模块文件中什么以下API函数: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, lParam As Any) As Long Public Const WM_CLOSE = &H10
这个例子也许能满足你的要求,因为用shell打开程序的时候返回一个句柄,这样就简单多了 Private Const WM_CLOSE = &H10 Dim a Private Declare Function PostMessage Lib "user32" Alias _ "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_Click()b = PostMessage(a, WM_CLOSE, 0, ByVal 0&) Debug.Print b End SubPrivate Sub Form_Load() a = Shell("C:\Program Files\Kingsoft\Powerword 2003\xdict.exe") Debug.Print a End Sub
Private Const WM_CLOSE = &H10 Dim WinWnd As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click() WinWnd = FindWindow(vbNullString, "计算器")PostMessage WinWnd, WM_CLOSE, 0&, 0&End SubPrivate Sub Form_Load() Shell "calc.exe" End Sub
'解决的方法 Private Const WM_CLOSE = &H10 Dim WinWnd As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click() WinWnd = FindWindow(vbNullString, "计算器")PostMessage WinWnd, WM_CLOSE, 0&, 0&End SubPrivate Sub Form_Load() Shell "calc.exe" End Sub
为了让以上的代码工作,你必须在模块文件中什么以下API函数: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, lParam As Any) As Long Public Const WM_CLOSE = &H10
Private Const WM_CLOSE = &H10
Dim a
Private Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_Click()b = PostMessage(a, WM_CLOSE, 0, ByVal 0&)
Debug.Print b
End SubPrivate Sub Form_Load()
a = Shell("C:\Program Files\Kingsoft\Powerword 2003\xdict.exe")
Debug.Print a
End Sub
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=51567
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=44613
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=45095
Dim WinWnd As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click()
WinWnd = FindWindow(vbNullString, "计算器")PostMessage WinWnd, WM_CLOSE, 0&, 0&End SubPrivate Sub Form_Load()
Shell "calc.exe"
End Sub
不过这种方法常常会出问题的
Private Const WM_CLOSE = &H10
Dim WinWnd As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click()
WinWnd = FindWindow(vbNullString, "计算器")PostMessage WinWnd, WM_CLOSE, 0&, 0&End SubPrivate Sub Form_Load()
Shell "calc.exe"
End Sub