怎么查找并关闭正在运行的程序?除了利用程序标题,如果方便能不能联系我,我的QQ52573701

解决方案 »

  1.   

    http://bbs.xiakexing.com/cgi-bin/topic.cgi?forum=20&topic=461
      

  2.   

    别人写的一个(查询系统进程,并结束掉):新建一个工程project1,窗口form1 ,加入一个listview (lvwPrss) 3个button(cmdRefresh,cmdDelete,cmdExit)
    代码如下
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function ExitProcess Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
    Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Const LOCALE_STIMEFORMAT = &H1003
    Private Const LOCALE_SSHORTDATE = &H1F
    Private Const WM_SETTINGCHANGE = &H1A
    Private Const HWND_BROADCAST = &HFFFF&Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
    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 Long
    Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long'***************************************Option Explicit
    '获得进程的句柄
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
    ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long
    '终止进程
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, _
    ByVal uExitCode As Long) As Long
    '创建一个系统快照
    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
    (ByVal lFlags As Long, lProcessID As Long) As Long
    '获得系统快照中的第一个进程的信息
    Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" _
    (ByVal mSnapShot As Long, uProcess As PROCESSENTRY32) As Long
    '获得系统快照中的下一个进程的信息
    Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" _
    (ByVal mSnapShot As Long, uProcess As PROCESSENTRY32) As LongPrivate Type PROCESSENTRY32
        dwSize As Long
        cntUsage As Long
        th32ProcessID As Long
        th32DefaultHeapID As Long
        th32ModuleID As Long
        cntThreads As Long
        th32ParentProcessID As Long
        pcPriClassBase As Long
        dwFlags As Long
        szexeFile As String * 260&
    End Type
    Private Const TH32CS_SNAPPROCESS As Long = 2&
    Dim mresult
    Private Sub cmdRefresh_Click()
        doList
    End Sub
    Private Sub Form_Load()
        lvwPrss.ListItems.Clear
        lvwPrss.ColumnHeaders.Clear
        lvwPrss.ColumnHeaders.Add , , "进程ID", 1500
        lvwPrss.ColumnHeaders.Add , , "进程名", 5600
        lvwPrss.LabelEdit = lvwManual
        lvwPrss.FullRowSelect = True
        lvwPrss.HideSelection = False
        lvwPrss.HideColumnHeaders = False
        lvwPrss.View = lvwReport
    End Sub
    Private Sub Form_Activate()
        doList
    End Sub
    'listview的大小随窗体变化
    Private Sub Form_Resize()
        lvwPrss.Move 0, 0, Me.ScaleWidth - cmdRefresh.Width, Me.ScaleHeight
        cmdRefresh.Move lvwPrss.Width - lvwPrss.Left
        cmdDelete.Move lvwPrss.Width - lvwPrss.Left
        cmdExit.Move lvwPrss.Width - lvwPrss.Left
    End SubPrivate Sub doList()
        Dim uProcess As PROCESSENTRY32
        Dim mSnapShot As Long
        Dim mName As String
        Dim i As Integer
        Dim mlistitem As ListItem
         
        lvwPrss.ListItems.Clear
        DoEvents
        uProcess.dwSize = Len(uProcess)
        mSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
        If mSnapShot Then
            mresult = ProcessFirst(mSnapShot, uProcess)
            '失败则返回false
            Do While mresult
                i = InStr(1, uProcess.szexeFile, Chr(0))
                mName = LCase$(Left$(uProcess.szexeFile, i - 1))
                Set mlistitem = lvwPrss.ListItems.Add(, , Text:=uProcess.th32ProcessID)
                mlistitem.SubItems(1) = mName
                mresult = ProcessNext(mSnapShot, uProcess)
            Loop
        End If
        cmdDelete.Enabled = (lvwPrss.ListItems.Count > 0)
    End Sub'强行终止当前进程
    Private Sub cmdDelete_Click()
        If lvwPrss.ListItems.Count = 0 Then
            Exit Sub
        End If
        If MsgBox("真的终止" & lvwPrss.Name & " 进程吗?", vbYesNo + vbQuestion) <> vbYes Then
            Exit Sub
        End If
         
        Dim mProcID As Long
        mProcID = OpenProcess(1&, -1&, lvwPrss.SelectedItem)
        TerminateProcess mProcID, 0&
        DoEvents
        lvwPrss.ListItems.Remove (lvwPrss.SelectedItem.Index)
        lvwPrss.Refresh
    End Sub
    '显示错误信息
    Sub ErrMsgProc(mMsg As String)
        MsgBox mMsg & vbCrLf & Err.Number & Space(5) & Err.Description
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        Unload Form1
    End Sub
      

  3.   

    Option ExplicitPrivate Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
    Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
    Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Const MAX_PATH As Integer = 260
    Private Type PROCESSENTRY32
       dwSize As Long
       cntUsage As Long
       th32ProcessID As Long
       th32DefaultHeapID As Long
       th32ModuleID As Long
       cntThreads As Long
       th32ParentProcessID As Long
       pcPriClassBase As Long
       dwFlags As Long
       szExeFile As String * MAX_PATH
    End Type
    Const TH32CS_SNAPheaplist = &H1
    Const TH32CS_SNAPPROCESS = &H2
    Const TH32CS_SNAPthread = &H4
    Const TH32CS_SNAPmodule = &H8
    Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule
    Private Sub Command1_Click()
    Dim i As Long, lPid As Long
    Dim Proc As PROCESSENTRY32
    Dim hSnapShot As Long
       ListView1.ListItems.Clear '清空ListView
       hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) '获得进程“快照”的句柄
       Proc.dwSize = Len(Proc)
       lPid = ProcessFirst(hSnapShot, Proc) '获取第一个进程的PROCESSENTRY32结构信息数据
       i = 0
       Do While lPid <> 0 '当返回值非零时继续获取下一个进程
           ListView1.ListItems.Add , "a" & i, Hex(Proc.th32ProcessID)    '将进程ID添加到ListView1第一列
           ListView1.ListItems("a" & i).SubItems(1) = Proc.szExeFile '将进程名添加到ListView1第二列
           i = i + 1
           lPid = ProcessNext(hSnapShot, Proc) '循环获取下一个进程的PROCESSENTRY32结构信息数据
       Loop
       CloseHandle hSnapShot '关闭进程“快照”句柄
    End SubPrivate Sub Command2_Click()
    Dim lPHand As Long, TMBack As Long
       If ListView1.SelectedItem.Text <> "" Then
           If MsgBox("确实要结束进程[" & ListView1.SelectedItem.SubItems(1) & "]吗?", vbYesNo) = vbYes Then
               lPHand = Val("&H" & ListView1.SelectedItem.Text)
               lPHand = OpenProcess(1&, True, lPHand)  '获取进程句柄
               TMBack = TerminateProcess(lPHand, 0&) '关闭进程
               If TMBack <> 0 Then
                 MsgBox ListView1.SelectedItem.SubItems(1) & "已经被终止!"
               Else
                 MsgBox ListView1.SelectedItem.SubItems(1) & "不能被终止!"
               End If
               CloseHandle lPHand
               Command1_Click '刷新进程列表
           End If
       End If
    End SubPrivate Sub form_Load()
       Me.Caption = "进程管理器"
       Command1.Caption = "刷新"
       Command2.Caption = "结束进程"
       ListView1.ColumnHeaders.Clear
       ListView1.ColumnHeaders.Add , "a", "进程ID", 600
       ListView1.ColumnHeaders.Add , "b", "进程名", 4000
       ListView1.View = lvwReport
       Command1_Click '刷新进程列表
    End Sub