
知道一个进程句柄,比如OpenProcess打开的句柄,想要得到这个进程的PID,可以使用一个XPSP1新增的API:
//输入hProcess,返回PID Private Declare Function GetProcessId Lib "kernel32" (ByVal hProcess As Long) As Long
|
注意这个函数只能在XPSP1及以上系统中才可以使用
要增加通用性,可以使用NTDLL导出的NtQueryInformationProcess函数来完成:
'结构,常量及API声明 Private Const STATUS_SUCCESS As Long = &H0& Private Type PROCESS_BASIC_INFORMATION ExitStatus As Long PebBaseAddress As Long AffinityMask As Long BasePriority As Long UniqueProcessId As Long InheritedFromUniqueProcessId As Long End Type Private Declare Function NtQueryInformationProcess Lib "ntdll" ( _ ByVal ProcessHandle As Long, _ ByVal ProcessInformationClass As Long, _ ByRef ProcessInformation As Any, _ ByVal lProcessInformationLength As Long, _ ByRef lReturnLength As Long) As Long
|
使用示例:
Dim PBI As PROCESS_BASIC_INFORMATION If STATUS_SUCCESS = NtQueryInformationProcess(hProcess, 0, PBI, Len(PBI), ByVal 0) Then MsgBox PBI.UniqueProcessId 'UniqueProcessId就是PID End If
|
近期评论