通过API找到改应用程序的句柄,然后给这个程序发送close的消息把它关掉。网上很多例子,自己当下来看一下,体会比较深!呵呵

解决方案 »

  1.   

    同意楼上的意见!
    例子嘛~~~电脑爱好者  上面有!
    先用API函数得到要关闭窗口的标题,然后再用API函数中的关闭(close)函数将其关闭即可!
      

  2.   

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    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
    Private Sub Command1_Click()
    On Error Resume Next
    aa = Shell("C:\WINDOWS\CALC.EXE", 1)
    End Sub
    Private Sub Command2_Click()
    Const NILL = 0&
    Const WM_SYSCOMMAND = &H112
    Const SC_CLOSE = &HF060
    lpClassName$ = "SciCalc"
    lpCaption$ = "计算器"
    Handle = FindWindow(lpClassName$, lpCaption$)
    X& = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)
    End Sub
      

  3.   

    http://www.cfan.com 
    这是电脑爱好者的网址!例子我不能保证有~~~但先上去找找再说!
      

  4.   

    计算器的lpClassName$ = "SciCalc"我怎么知道我要关闭(.exe)的lpclassname呢!
      

  5.   

    我用spy看了,把lpClassName$ 、lpCaption$ 都找到了,但还是关不了。为什么呢?是不是和WM_SYSCOMMAND, SC_CLOSE这二个参数有关呢! 我想用扫雷做个example。我是这么写的Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    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
    Private Sub Command1_Click()
    On Error Resume Next
    aa = Shell("C:\WINDOWS\winmime.EXE", 1)
    End Sub
    Private Sub Command2_Click()
    Const NILL = 0&
    Const WM_SYSCOMMAND = &H112
    Const SC_CLOSE = &HF060
    lpClassName$ = "扫雷"
    lpCaption$ = "扫雷"
    Handle = FindWindow(lpClassName$, lpCaption$)
    X& = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)
    End Sub 请告诉为什么不行呢?
      

  6.   

    使用api中的findwindow()函数啊,第一参数为null,第二个为窗口的标题,得到它的句柄后就用sendmessage()给它发一个关闭的消息。查句柄例程如下:
    Option Explicit
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
    Private Declare Function ShowMe Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long
    Dim THandle As Long
    Private Sub Command1_Click()
        THandle = FindWindow(vbEmpty, "文档 - 写字板")
        MsgBox THandle
        ShowMe THandle
    End Sub
    Private Sub Form_Load()
        Shell "c:\windows\write.exe", 1
    End Sub
      

  7.   

    Option ExplicitPrivate 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, lParam As Any) As Long
    Private Const WM_CLOSE = &H10Private Sub Command1_Click()
    On Error Resume Next
     Shell "winmine.exe", 1
    End Sub
    Private Sub Command2_Click()
    Dim lpClassName As String, lpCaption As String
    Dim Handle As Long
    Dim RetVal As LonglpClassName = "扫雷"
    lpCaption = "扫雷"Handle = FindWindow(vbNullString, lpCaption)PostMessage Handle, WM_CLOSE, 0&, 0&End Sub
      

  8.   

     用 PostMessage 即可。用上面的例子试一试!