如何在VB中关闭一个外接程序种的某个进程,也就是如何利用API找的要关闭的进程号

解决方案 »

  1.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=45095
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=44613
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18848
      

  2.   

    你好lihonggen0(李洪根,用.NET,标准答案来了):
        我试了以上的方法,她到时可以结束一个正在运行的程序,但是它是一个强制关闭程序.
    程序中的部分信息会丢失.我想实现的是把窗体正确结束.好比在Win2000中的,任务管理器中的"应用程序"那样结束程序.用http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18848上的方法,就好比 任务管理器 中"进程"那样结束程序,在结束时会警告程序中会丢失一部分内容.
        若正确结束程序,该如何作?????????
      

  3.   

    sendmessage WM_CLOSE,用发自己查。
      

  4.   

    楼上的,我用了sendmessage WM_CLOSE,但是不管用。他连程序都关不了。
           If proID > 0 Then
                     SendMessage proID, WM_CLOSE, 0, 0       End If
    其中,proID为要关闭的窗口的进程号。
    怎么办!!!!!!!!!!!!
      

  5.   

    用关闭窗口试试,我也是新手,多指教。
    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 Declare Function FindWindow% Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpCaption As Any)Private Function CloseIt(ByVal sPara As String)
        Dim hWnd            As Long
        Do
            hWnd = FindWindow("XLMAIN", "Microsoft Excel" & " - " & sPara)
            Call SendMessage(hWnd, WM_CLOSE, 0, 0)
            DoEvents
        Loop Until hWnd = 0
    End Function
      

  6.   

    你可以使用GetExitCodeProcess{hprocess,lpexitcode}
    这个函数用来检测进程有没有结束,如果没有结束,则lpexitcode返回Still_ACTIVE就可以判断进程有没有结束。这需要做一个循环。
    如果需要检测父进程中等待子进程结束可用函数WaitForSingleObject函数来等待进程结束。
    关闭进程用CloseHandle函数
    CloseHandle,stProcInfo.hProcess
    CloseHandle,stProcInfo.hThread
      

  7.   

    Win2000中的,任务管理器中的"应用程序"那样结束程序Win2000中的,任务管理器中也是强制关闭
    使用的也是TerminateProcess函数。
    sendmessage只能关闭窗口,不是对进程作用的。
      

  8.   

    先GetWindowThreadProcessId获取主线程ID
    然后PostThreadMessage WM_CLOSE
      

  9.   

    楼上的,在Win2000中的,任务管理器中的"应用程序"中关闭程序是不会丢失信息,但是我用TerminateProcess函数关闭窗口就会丢失信息。
    在Win2000 任务管理器中的“进程”一栏中关闭程序,就会有丢失信息的情况出现。在“应用程序”一栏中关闭程序,就不会丢失信息。
    请问如何实现,Win2000 任务管理器中“应用程序”一栏的效果,请指教。
      

  10.   

    如果你知道要关闭的窗体的名字的话!可以使用FINDWINDOW和POSTMESSAGE(同SENDMESSAGE)
    关闭窗体!
    Private Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As Long, _
                   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 LongConst wm_close = &H10Private Sub Form_Load()
        Dim hwnd As Long
        
        hwnd = FindWindow(0&, "扫雷")
        If hwnd <> 0 Then
            PostMessage hwnd, wm_close, 0, 0
        End If
        
    End Sub-------------------------------------------------------------------------------------------------
    CloseHandle VB声明 
    Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long 
    说明 
    关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hObject Long,欲关闭的一个对象的句柄 
    注解 
    除非对内核对象的所有引用都已关闭,否则该对象不会实际删除