通过进程句柄(hProcess)获得PID

在CSDN的 这个帖子 见到了这个需求.

知道一个进程句柄,比如OpenProcess打开的句柄,想要得到这个进程的PID,可以使用一个XP SP1新增的API:

Private Declare Function GetProcessId Lib "kernel32" (ByVal hProcess As Long) As Long


输入hProcess,返回PID.

注意这个函数只能在XP SP1及以上系统中才可以使用.

要增加通用性,可以使用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


上一篇: 终于结算工资了
下一篇: 面临选择了.
文章来自: 本站原创
评论: 0 | 引用: 0 | 查看次数: 576