在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
;
}
輸出: