如题!

解决方案 »

  1.   

    你可以使用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
      

  2.   

    这个例子也许能满足你的要求,因为用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
      

  3.   

    这样:
    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
      

  4.   

    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
      

  5.   

    用shell打开程序的时候记得并不是返回一个句柄,似乎要用openprocess打开进程,得到进程句柄,再终止进程!用直接的方法,不需要用findwindow来查找窗口。待我看看
      

  6.   

    你说的是OpenProcess+KillProcess
    不过这种方法常常会出问题的
      

  7.   

    '解决的方法
    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