怎么实现关闭未指定的进程?
就是说我指定了的进程就不会被关闭,但是我没有指定的进程会被全部关闭。
大家帮帮我。谢谢 !!!!

解决方案 »

  1.   

    Option Explicit'常量定义
    '程序的显示方式
    Private Const SW_SHOWNORMAL = 1
    Private Const SW_SHOW = 5
    Private Const SW_HIDE = 0
    Private Const SW_MINIMIZE = 6
    Private Const SW_MAXIMIZE = 3
    Private Const SW_RESTORE = 9Public Const WM_CLOSE = &H10'Synchronize
    Public Const INFINITE = &HFFFF
    Private Const NORMAL_PRIORITY_CLASS = &H20
    Public Const Synchronize = &H100000
    Public Const REALTIME_PRIORITY_CLASS = &H100'结构体
    Private Type SECURITY_ATTRIBUTES
            nLength As Long
            lpSecurityDescriptor As Long
            bInheritHandle As Long
    End TypePrivate Type PROCESS_INFORMATION
            hProcess As Long
            hThread As Long
            dwProcessId As Long
            dwThreadId As Long
    End TypePrivate Type STARTUPINFO
            cb As Long
            lpReserved As String
            lpDesktop As String
            lpTitle As String
            dwX As Long
            dwY As Long
            dwXSize As Long
            dwYSize As Long
            dwXCountChars As Long
            dwYCountChars As Long
            dwFillAttribute As Long
            dwFlags As Long
            wShowWindow As Integer
            cbReserved2 As Integer
            lpReserved2 As Long
            hStdInput As Long
            hStdOutput As Long
            hStdError As Long
    End Type'启动一个应用程序(资源管理器方式)
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                           (ByVal hWnd As Long, ByVal lpOperation As String, _
                            ByVal lpFile As String, ByVal lpParameters As String, _
                            ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
                        ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long'Dim Rc As Long
    'Rc = ShellExecute(Me.hwnd, "Open", "CPUID.TXT", "", "E:\", SW_SHOWNORMAL)
    '               调用窗口句柄,执行的操作,文件名,"",文件所在目录,显示方式
    '返回值:   如果大于32则调用成功,小于32则调用失败
    '---------------------------------------------------------
    '建立一个新的进程或线程
    Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
                                            (ByVal lpApplicationName As String, _
                                             ByVal lpCommandLine As String, _
                                             ByVal lpProcessAttributes As Long, _
                                             ByVal lpThreadAttributes As Long, _
                                             ByVal bInheritHandles As Long, _
                                             ByVal dwCreationFlags As Long, _
                                             lpEnvironment As Any, _
                                             ByVal lpCurrentDirectory As String, _
                                             lpStartupInfo As STARTUPINFO, _
                                             lpProcessInformation As PROCESS_INFORMATION) As Long'参数说明:
    'lpApplicationName       可执行文件或模块的名字.如果lpCommandLine是NULL,则CreateProcess _
                             执行这个参数中指定的程序.
    'lpCommandLine           如果lpApplicationName是NULL,那么这个参数中程序要启动的程序名字 _
                             如果lpApplicationName和lpCommandLine都是NULL , 那么程序的名字在 _
                             lpApplicationName中指定 , 参数在lpCommandLine中指定.
    'lpProcessAttributes     SECURITY_ATTRIBUTES结构,它定义进程是否能够被继承,一般设为0, _
                             但一般将其定义为ByVal as Long,    (**这与API浏览器中不同)
    'lpThreadAttributes      SECURITY_ATTRIBUTES结构,它定义线程是否能够被断承.一般设为0, _
                             但一般将其定义为ByVal as Long,    (**这与API浏览器中不同)
    'bInheritHandles         布尔值,它表示新创建的进程能否继承调用进程的句柄.
    'dwCreationFlags         为进程指定附加配置参数的标志.
    'lpEnvironment           包含一个以NULL结束的环境参数列表的字符串.如果参数被设为NULL, _
                             则当前的环境被用在新的进程中.
    'lpCurrentDriectory      指向新进程的默认目录的字符串.
    'lpStartupInfo           STARTUPINFO结构,,它配置新进程的外观.
    'lpProcessInformation    PROCESS_INFORMATION结构,返回新建进程的有关信息.
    '返回值                  如果调用成功,则返回一个非零值.如果返回值为0,则调用失败,调用函 _
                             GetLastError可以获取更多的错误信息.'---------------------------------------------------------------------------
    '等待进程返回或者发生超时.负责调用CreateProcess这个同步操作.
    Public Declare Function WaitForSingleObject Lib "kernel32" _
                            (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long'参数说明:
    'hHandle                等待进程的句柄
    'dwMilliseconds         等待的时间段,以毫秒为单位.;如果它被设为INFINITE,则这个API将无限期的 _
                            等待的进程返回.
    '返回值                 如果调用成功,则返回引起这个函数返回的值,它可以是以下几个值: _
                            WAIT_ABANDONED,WAIT_OBJECT_O,或者WAIT_TIMEOUT.如果发生了错误,则返回 _
                            WAIT_FAILED.
    '---------------------------------------------------------------------------
    '关闭以前打开的进程.
    'Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    'Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)'参数说明:
    'hObject                被关闭的句柄.
    '返回值                 如果调用成功,返回一个非零值.若失败则返回值0.
    '---------------------------------------------------------------------------'参数说明:
    'FileName               要打开的文件名
    'Wait                   布尔值,是否同步启动
    'DoPath                 文件的所在目录
    '返回值                 =1 成功,=0 失败
    '注:如果是关联打开一个文件,必须用异步方式Public Function Spawn(ByVal FileName As String, _
                          Wait As Boolean, _
                          DoPath As String) As Long
      Dim Proc As PROCESS_INFORMATION
      Dim Start As STARTUPINFO
      Dim Rc As Long
      Dim Mdriv As String
      Dim OpenName As String
      Dim OpenPath As String
      OpenName = EditFile(FileName): OpenPath = MyPath(FileName)
      
      If Wait Then '如果T,同步启动
         Start.cb = Len(Start)
         '建立一个新的进程
         Rc = CreateProcess(FileName, OpenPath, _
                            ByVal 0, ByVal 0, 1, _
                            NORMAL_PRIORITY_CLASS, _
                            ByVal 0, OpenPath, _
                            Start, Proc)
         '等待,直到进程结束
         Rc = WaitForSingleObject(Proc.hProcess, INFINITE)
         '关闭进程
         Rc = CloseHandle(Proc.hProcess)
      Else
         '否则,异步启动,(资源管理器启动)
         Rc = ShellExecute(0, "Open", OpenName, "", OpenPath, SW_MAXIMIZE)
      End If
      Spawn = Rc
    End Function'启动EXE文件,不等待,返回进程句柄
    Public Function OpenExe(ByVal FileName As String, _
                            DoPath As String) As Long
      Dim Proc As PROCESS_INFORMATION
      Dim Start As STARTUPINFO
      Dim Rc As Long
      Dim Mdriv As String
      Dim A As String
      Dim b As String
      A = EditFile(FileName)
      
      ChDrive DoPath: ChDir DoPath
      Rc = CreateProcess(A, DoPath, _
                         ByVal 0, ByVal 0, 1, _
                         NORMAL_PRIORITY_CLASS, _
                         ByVal 0, vbNullString, _
                         Start, Proc)
      OpenExe = Proc.hProcess
      ChDrive "C:\": ChDir "C:\"
    End Function
    '关闭EXE文件      PROID=进程句柄
    Public Function CloseExe(ProID As Long)
         Dim Rc As Long
         'Call TerminateProcess(ProID, 0)
         '关闭进程
         Call ExitPro(ProID)
    End Function
      

  2.   

    枚举获得所有进程,如果是你指定的进程就保留否则就调用TerminateProcess将其关闭
      

  3.   

    我已经枚举获得所有进程,但是你后面说的“如果是你指定的进程就保留否则就调用TerminateProcess将其关闭”这个不懂,你能举个例子说说吗?谢谢
      

  4.   

    TerminateProcess 是强制结束进程的api函数,有问题吗?
      

  5.   

    rainstormmaster(暴风雨 v2.0)说的很明白了~~
      

  6.   

    //rainstormmaster(暴风雨 v2.0)说的很明白了~~知道呀,但是…………
    算了有些问题说不清。