在C++中,可以使用OpenProcess函数获取进程的句柄(HANDLE),但是怎么用HANDLE获取进程id呢?
在processthreadsapi.h中,有着这样一个鲜为人知的函数:
WINBASEAPI DWORD WINAPI GetProcessId (HANDLE Process);
WINBASEAPI DWORD WINAPI GetThreadId (HANDLE Thread);
没错,根据HANDLE获取进程/线程id
所以可以写出:
int GetProcessIdByHandle(HANDLE ProcessID){
return (int)GetProcessId(ProcessID);
}
int GetThreadIdByHandle(HANDLE ProcessID){
return (int)GetThreadId(ProcessID);
}
运行测试:
用tasklist.exe列出进程
代码:
#include<windows.h>
#include<iostream>
int GetProcessIdByHandle(HANDLE ProcessID){
return (int)GetProcessId(ProcessID);
}
int GetThreadIdByHandle(HANDLE ProcessID){
return (int)GetThreadId(ProcessID);
}
int main(){
HANDLE handle_process=OpenProcess(PROCESS_ALL_ACCESS, FALSE, 12652);
std::cout<<"Process: "<<GetProcessIdByHandle(handle_process)<<"\nThread: "<<GetThreadIdByHandle(handle_process);
re
turn
0
;
}
输出: