学习LC进程管理器模块 | 雨律在线
Option Explicit

'*************************************
'用于枚举进程
'*************************************
'CreateToolhelpSnapshot为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。

'参数:

'dwFlags

'TH32CS_INHERIT -声明快照句柄是可继承的?
'TH32CS_SNAPall -在快照中包含系统中所有的进程和线程?
'TH32CS_SNAPheaplist -在快照中包含在th32ProcessID中指定的进程的所有的堆?
'TH32CS_SNAPmodule -在快照中包含在th32ProcessID中指定的进程的所有的模块?
'TH32CS_SNAPPROCESS -在快照中包含系统中所有的进程?
'TH32CS_SNAPthread -在快照中包含系统中所有的线程?

'th32ProcessID

'[输入]指定将要快照的进程ID。如果该参数为0表示快照当前进程。
'该参数只有在设置了TH32CS_SNAPHEAPLIST或TH32CS_SNAPMOUDLE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。
Public Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long

Public Const
TH32CS_SNAPPROCESS = &H2 '对象为系统中的所有进程
Public Const TH32CS_SNAPheaplist = &H1 '对指定进程中的堆进行枚举。
Public Const TH32CS_SNAPthread = &H4 '对系统范围中的线程进行枚举。
Public Const TH32CS_SNAPmodule = &H8 '表示对象为由th32ProcessID参数指定的进程调用的所有模块
'在快照中包含系统中所有的进程和线程。
Public Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule

Public Type PROCESSENTRY32

dwSize
As Long '结构大小
cntUsage As Long '此进程的引用计数
th32ProcessID As Long '进程ID
th32DefaultHeapID As Long '进程默认堆ID
th32ModuleID As Long '进程模块ID
cntThreads As Long '此进程开启的线程计数
th32ParentProcessID As Long '父进程ID
pcPriClassBase As Long '线程优先权
dwFlags As Long '保留
szExeFile As String * MAX_PATH '进程全名

End Type

'获得系统快照中的第一个进程的信息
Public Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

'获得系统快照中的下一个进程的信息
Public Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

'TerminateProcess强行中止指定进程的运行
'参数
'hProcess 要中止的进程句柄,注意:不是进程ID
'uExitCode 进程的退出码,其它程序可以通过GetExitCodeProcess获取的退出码
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

'OpenProcess打开指定进程
'参数
'dwDesiredAccess访问标识
'bInheritHandle,//句柄是否可继承
'dwProcessId //系统进程ID

'其中dwDesiredAccess参数可以是以下常量的任意组合:
'PROCESS_ALL_ACCESS//所有可能的权限
'PROCESS_Create_PROCESS//内部使用
'PROCESS_Create_THREAD//产生线程权限
'PROCESS_DUP_HANDLE//复制句柄权限
'PROCESS_QUERY_INformATION//查询信息权限
'PROCESS_SET_INformATION//设置信息权限
'PROCESS_TERMINATE//中止进程权限
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Public Const
PROCESS_ALL_ACCESS = 0 '所有可能的权限
Public Const PROCESS_TERMINATE = &H1 '進程中止
Public Const PROCESS_VM_REA
D =
16 '允许远程VM读
Public Const PROCESS_QUERY_INFORMATION = 1024 '查询信息权限
Public Const PROCESS_SET_INFORMATION = 612 '设置信息权限

'关闭句柄
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'*************************************
'用于枚举进程
'*************************************

'*************************************
'用于获取进程模块及其内存信息
'*************************************
Public Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
'GetModuleFileNameExA可以实现通过进程句柄获取进程文件名
'参数
'hProcess: 接受进程句柄的参数,是HANDLE类型的变量
'hModule: 指针型参数,在本文的程序中取值为NULL
'lpstrFileName:LPTSTR类型的指针,用于接受主调函数传递来的用于存放进程名的字符数组指针
'nsize: lpstrFileName所指数组的长度
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long

'EnumProcessModules用来枚举进程模块
'参数
'hProcess: 进程句柄
'lphModule: 指向模块句柄数组链
'cb: 模块句柄数组大小,字节计数
'lpcbNeeded): 存储所有模块句柄所需的字节数
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long

'获取进程的内存信息
Public Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long

Public
Type PROCESS_MEMORY_COUNTERS
cb
As Long
PageFaultCount As Long '页故障数目
PeakWorkingSetSize As Long '进程的工作集峰值
WorkingSetSize As Long '工作集峰值大小
QuotaPeakPagedPoolUsage As Long '分页池使用配额峰值
QuotaPagedPoolUsage As Long '分页池使用配额
QuotaPeakNonPagedPoolUsage As Long '非分页池使用配额峰值
QuotaNonPagedPoolUsage As Long '非分页池使用配额
PagefileUsage As Long '页文件使用情况
PeakPagefileUsage As Long '页文件使用峰值
End Type

'GetExitCodeProcess获取一个已中断进程的退出代码
'参数
'hProcess : 想获取退出代码的一个进程的句柄
'lpexitcode: 用于装载进程退出代码的一个长整数变量。如进程还未中止,则设为常数STILL_ACTIVE
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpexitcode As Long) As Long

Public Const
STILL_ACTIVE = &H103 '进程还未中止
'******************************************************************************

'*************************************
'用于获取和设置进程优先级
'*************************************
'GetPriorityClass获取一个进程当前的优先级类
'hProcess Long: 进程句柄
Public Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As Long) As Long

>'SetPriorityClass设置一个进程的优先级类
'参数
'hProcess Long,指定一个进程的句柄
'dwPriorityClass Long,指定了新优先级类的一个常数。请参考CreateProcess函数的dwCreationFlags参数,那里有优先级类的一个列表
Public Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long

Public Const
HIGH_PRIORITY_CLASS = &H80 '新进程有非常高的优先级,它优先于大多数应用程序。基本值是13。注意尽量避免采用这个优先级
Public Const IDLE_PRIORITY_CLASS = &H40 '新进程应该有非常低的优先级——只有在系统空闲的时候才能运行。基本值是4
Public Const NORMAL_PRIORITY_CLASS = &H20 '标准优先级。如进程位于前台,则基本值是9;如在后台,则优先值是7
Public Const REALTIME_PRIORITY_CLASS = &H100 '立即对事件作出响应,执行关键时间的任务。会抢先于操作系统组件之前运行。
'********************************************************************


 
目前有0条回应
Comment
Trackback
你目前的身份是游客,请输入昵称和电邮!