枚举进程的线程,大家看看我写的哪错了?
现在可以列出所有进程,但是不会列出线程,调用ThreadFirst返回的是0,
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 ThreadFirst Lib "kernel32" Alias "Thread32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ThreadNext Lib "kernel32" Alias "Thread32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Type PROCESSENTRY32
dwSize As Long
cntUseage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
swFlags As Long
szExeFile As String * 1024
End Type
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPheaplist = &H1
Private Const TH32CS_SNAPthread = &H4
Private Const TH32CS_SNAPmodule = &H8
Private Sub Command1_Click()
Call process
End Sub
Private Sub Command2_Click()
Call thread(0)
End Sub
Private Sub List1_Click()
Call thread(List1.List(List1.ListIndex))
End Sub
Private Sub thread(pro As Long)
Dim MySnapHandle As Long
Dim threadInfo As PROCESSENTRY32
threadInfo.dwSize = Len(threadInfo)
MySnapHandle = CreateToolhelpSnapshot(TH32CS_SNAPthread, pro)
id = ThreadFirst(MySnapHandle, threadInfo)
List2.Clear
List2.AddItem (id)
Do While id <> 0
List2.AddItem (threadInfo.th32ProcessID)
id = ThreadNext(MySnapHandle, threadInfo)
List2.AddItem (id)
Loop
List2.AddItem (id)
CloseHandle MySnapHandle
End Sub
Private Sub process()
Dim MySnapHandle As Long
Dim ProcessInfo As PROCESSENTRY32
MySnapHandle = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0)
ProcessInfo.dwSize = Len(ProcessInfo)
List1.Clear
id = ProcessFirst(MySnapHandle, ProcessInfo)
Do While id <> 0
List1.AddItem (ProcessInfo.th32ProcessID)
List1.AddItem (ProcessInfo.szExeFile)
id = ProcessNext(MySnapHandle, ProcessInfo)
Loop
CloseHandle MySnapHandle
End Sub