【C++】根據進程句柄獲取pid


在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列出進程
 cmd.exe                      12652

 得出cmd的進程id為12652

代碼:
#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 ;
 
 輸出:

Process: 12652                
Thread: 0                        

 運行成功!!

線程(Thread)和進程(Process)不是一樣的,所以Thread返回0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM