谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/t/20030315/12/1534349.html
      

  2.   

    Option Explicit
    Private 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