现在可以列出所有进程,但是不会列出线程,调用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
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
解决方案 »
- excel 导入到SqlServer又有新问题 急! 没分了,有没有好心人?
- 有兴趣的进来看一下!关于filesystemobject
- 无法打开的问题
- PictureBox使用Pset方法后,上面的东西无法保存。一拖动窗体,上面的东西就没了。
- oracle 取记录集问题
- 大家来帮个忙
- datagrid可以做到列冻结吗?
- 如何保存子窗体工具栏状态?
- 散分啦!一个小问题,麻烦解答!
- 问问各位:一般一个ASP+SQL的程序价格能出多少?
- 急求帮助,如何通过程序实现对word文档的排版.
- DataGrid控件已绑定到adodc控件,动态改变adodc记录源后,DataGrid不显示,调试窗口显示"下标越界 "
HANDLE snapshothandle=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
THREADENTRY32 threadentry;
threadentry.dwSize=sizeof(THREADENTRY32);
BOOL finded=Thread32First(snapshothandle,&threadentry);
while(finded!=NULL)
{
//threadentry中返回线程信息
finded=Thread32Next(snapshothandle,&threadentry);
}
CloseHandle(snapshothandle); );
这是我写的VB的
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 Type THREADENTRY32
dwsize As Long
cntusage As Long
th32threadID As Long
th32OwnerProcessID As Long
tpBasePri As Long
tpDeltaPri As Long
dwFlags As Long
End Type
结构