VC++如何获取目标程序的句柄hProcess

本文介绍了在VC++中通过四种不同方式获取目标程序的句柄hProcess:1) 通过PID;2) 使用Spy++获取窗口句柄;3) 通过窗口名称;4) 通过遍历应用程序名称获取PID。详细步骤包括使用OpenProcess、GetWindowThreadProcessId、FindWindow和CreateToolhelp32Snapshot等函数。

方法一:

任务管理器找到程序的PID,通过PID获取hProcess

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);



方法二:

使用spy++获取目标程序窗口对应的句柄

通过窗口句柄获取PID,再使用方法一的函数获取hProcess 


HWND wnd = (HWND)0x0003069C;

DWORD pid;

GetWindowThreadProcessId(wnd, &pid);


方法三:

知道目标程序窗口的名称wndName

通过FindWindow获取窗口句柄,在通过方法二的函数进行获取

HWND wnd = ::FindWindow(NULL, wndName);



方法四:

只知道exe名称,通过遍历应用程序的名称获取运行的进程对应的pid,然后用这个pid使用方法一获取hProcess 


通过exe名称获取pid的方法如下:

#include <tlhelp32.h>

bool getPid(DWORD &findPID,CString findExeName)

{//findExeName名称中包含.exe

bool hasfind = false;

 

PROCESSENTRY32 pe32;

pe32.dwSize = sizeof(pe32);

HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)

{

AfxMessageBox(_T("CreateToolhelp32Snapshot调用失败!"));

return hasfind;

}

BOOL bMore = ::Process32First(hProcessSnap, &pe32);

while (bMore)

{

CString exeName = pe32.szExeFile;

DWORD pid = pe32.th32ProcessID;

if (exeName == findExeName)

{

findPID = pid;

hasfind = true;

break;

}

bMore = ::Process32Next(hProcessSnap, &pe32);

}

::CloseHandle(hProcessSnap);

 

return hasfind;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值