大家研究一下!

bob008 2002-09-11 08:13:32
我已经声明了PROCESS32和module32 的结构但是这个东东不知怎么没反应,也不报错!
还缺什么东东!!!大家指点一下!!
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function GetWindowThreadProcessId& Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long)
Private Declare Function Process32First Lib "kernel32" (ByVal hsnapshot As Long, uprocess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hsnapshot As Long, uprocess As PROCESSENTRY32) As Long
Private Declare Function Module32First Lib "kernel32" (ByVal hsnapshot As Long, lppe As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32" (ByVal hsnapshot As Long, lppe As MODULEENTRY32) As Long


Private Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Byte
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String * 1024
End Type



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 Type
Private Const TH32CS_SNAPPROCESS As Long = 2&
Private Const TH32CS_SNAPMODULE = &H8
Dim procresult

Private Sub lvw_Click()
ProcH.StatusBar1.Panels(2).Text = lvw.SelectedItem
Modulelis
End Sub
Sub Modulelis()
clvw.ListItems.Clear ''''清空列表,初始化
clvw.ColumnHeaders.Clear ''''清空表头,初始化
clvw.ColumnHeaders.Add , , "模块名称", 2000 '''添加到表头第一项,有顺序的
clvw.ColumnHeaders.Add , , "模块路径", 4000
clvw.ColumnHeaders.Add , , "占用内存", 1000
clvw.ColumnHeaders.Add , , "引用", 600
clvw.ColumnHeaders.Add , , "全局引用", 1000
clvw.ColumnHeaders.Add , , "模块ID", 1000
clvw.LabelEdit = lvwManual
clvw.FullRowSelect = True
clvw.HideSelection = False
clvw.HideColumnHeaders = False
clvw.View = lvwReport
Dim uprocess As PROCESSENTRY32
Dim l As Long
Dim mm As MODULEENTRY32
Dim lm As Long
Dim modlvw As ListItem
l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If l > 0 Then
uprocess.dwSize = Len(uprocess)
If Process32First(l, uprocess) Then
Do
'获得进程的标识符
lm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, uprocess.th32ProcessID)
If lm > 0 Then
mm.dwSize = Len(mm)
If Module32First(lm, mm) Then
Do
If uprocess.th32ProcessID = mm.th32ProcessID Then
' Set modlvw = clvw.ListItems.Add(, , Text:=Str$(mm.szExePath))
'modlvw.SubItems(5) = mm.ProccntUsage
'modlvw.SubItems(4) = mm.szExePath
' modlvw.SubItems(3) = mm.hModule
' modlvw.SubItems(2) = mm.modBaseAddr
' modlvw.SubItems(1) = mm.modBaseSize
End If
Loop Until (Module32Next(lm, mm) < 1)
End If
CloseHandle (lm)
End If
Loop Until (Process32Next(l, uprocess) < 1)
End If
CloseHandle (l)
End If
End Sub

...全文
32 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Montaque 2002-09-11
  • 打赏
  • 举报
回复
研究了一下你的代码,没有错误。不过要把这个函数以及所有的引用写到modules里面。就可以运行了。
你可以改为function Modulelis(clvw as listview)
然后在form里面调用。
不过要注意,在winnt里面没有toolhelp32api,改用PSAPI.DLL。2k里面两个都有的。
ityaa 2002-09-11
  • 打赏
  • 举报
回复
网上有现成的关于进程方面的例子代码,找一个研究一下应该可以。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧