首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

Openprocess总是返回0解决方法

2012-02-29 
Openprocess总是返回0如题, 部分代码如下:Public Const TH32CS_SNAPHEAPLIST &H1Public Const TH32CS_SN

Openprocess总是返回0
如题, 部分代码如下:


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 Type

Public Const PROCESS_TERMINATE = &H1
Public Const PROCESS_ALL_ACCESS = &H1F0FFF

Public 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 Long

Dim 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,请高手指点啊


[解决办法]
http://topic.csdn.net/t/20050801/14/4181298.html
[解决办法]

VB code
Option Explicit'强制变量声明'定义进程结构Private Type PROCESSENTRY32dwSize As LongcntUsage As Longth32ProcessID As Long'进程号th32DefaultHeapID As Long'堆栈号th32ModuleID As Long'模块号cntThreads As Longth32ParentProcessID As Long'父进程号pcPriClassBase As LongdwFlags As LongszExeFile As String * 260End 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 LongDim lNextProcess As LongDim 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 LongDim lExitCode As LonglProcess = OpenProcess(1, False, tPE.th32ProcessID)TerminateProcess lProcess, lExitCodeCloseHandle lProcessEnd If'进程指针下移一位,搜索下一个进程lNextProcess = Process32Next(lSnapShot, tPE)Loop'释放进程句柄CloseHandle (lSnapShot)End IfEnd Sub 

热点排行