如题, 部分代码如下:
Public Const TH32CS_SNAPHEAPLIST = &H1
Public Const TH32CS_SNAPPROCESS = &H2
Public Const TH32CS_SNAPTHREAD = &H4
Public Const TH32CS_SNAPMODULE = &H8
Public Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Public Const TH32CS_INHERIT = &H80000000
Public Const MAX_PATH As Integer = 260
Public Type PROCESSENTRY32 
dwSize   As Long
cntUsage   As Long
th32ProcessID   As Long
th32DefaultHeapID   As Long
th32ModuleID   As Long
cntTreads   As Long
th32ParentProcessID   As Long
pcPriClassBase   As Long
dwFlags   As Long
szExeFile   As String * MAX_PATH     
End TypePublic Const PROCESS_TERMINATE = &H1
Public Const PROCESS_ALL_ACCESS = &H1F0FFFPublic Declare Function OpenProcess Lib "kernel32 " Alias "OpenProcess " (ByVal dwDesiredAccess As Integer, ByVal blnheritHandle As Integer, ByVal dwAppProcessId As Integer) As Integer
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function TerminateProcess Lib "kernel32 " (ByVal hProcess As Long, ByVal uExitCode As Long) As LongDim proc As PROCESSENTRY32
Dim snap As Long
Dim exename As String
Dim theLoop As Long
Dim hand%
snap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
proc.dwSize = Len(proc)
theLoop = Process32First(snap, proc)
While theLoop <> 0 
exename = proc.szExeFile
If Left(exename, 12) = "iexplore.exe" Then
    hand = OpenProcess(PROCESS_TERMINATE, True, proc.th32ProcessID)
    Debug.Print hand
    TerminateProcess hand, 0
End If
CloseHandle snap取得的hand值总是0,请高手指点啊

解决方案 »

  1.   

    http://topic.csdn.net/t/20050801/14/4181298.html
      

  2.   

    Option Explicit'强制变量声明'定义进程结构
    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 * 260
    End TypePrivate Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
    '在进程队列中获取首个进程的地址
    Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
    '进程队列指针下移
    Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
    '打开进程
    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 Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
    Private Const TH32CS_SNAPPROCESS = &H2&Private Sub KillProcess(sProcess As String)
    Dim lSnapShot As Long
    Dim lNextProcess As Long
    Dim tPE As PROCESSENTRY32
    '创建进程队列快照
    lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
    '如果队列不为空则搜索
    If lSnapShot <> -1 Then
    '获取进程控制块
    tPE.dwSize = Len(tPE)
    '取首个进程的地址
    lNextProcess = Process32First(lSnapShot, tPE)
    '循环搜索
    Do While lNextProcess
    '判断是否索索到进程
    If LCase$(sProcess) = LCase$(Left(tPE.szExeFile, InStr(1, tPE.szExeFile, Chr(0)) - 1)) Then
    '结束进程
    Dim lProcess As Long
    Dim lExitCode As Long
    lProcess = OpenProcess(1, False, tPE.th32ProcessID)
    TerminateProcess lProcess, lExitCode
    CloseHandle lProcess
    End If
    '进程指针下移一位,搜索下一个进程
    lNextProcess = Process32Next(lSnapShot, tPE)
    Loop
    '释放进程句柄
    CloseHandle (lSnapShot)
    End If
    End Sub