【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