HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // handle to application instance
DWORD dwThreadId // thread identifier
)
中dwThreadId说明是:与钩子函数关联的线程ID,可是这个ID怎么得到哪?我用GetWindowThreadProcessId的返回值和第二个OUT参数都试了试,得不到正确的结果,我的代码如下:
_declspec (dllexport) void SetHook()
{
HWND hStart = ::FindWindow (NULL,"计算器");
//获得目标进程句柄
DWORD TID,PID;
TID = ::GetWindowThreadProcessId (hStart, &PID);
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,PID); //这里用PID和TID都不对,用NULL可以对所有线程设钩子
//g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInst,0);
}
请问高手,怎么向一个指定窗口下钩子,比如“计算器”窗口?
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // handle to application instance
DWORD dwThreadId // thread identifier
)
中dwThreadId说明是:与钩子函数关联的线程ID,可是这个ID怎么得到哪?我用GetWindowThreadProcessId的返回值和第二个OUT参数都试了试,得不到正确的结果,我的代码如下:
_declspec (dllexport) void SetHook()
{
HWND hStart = ::FindWindow (NULL,"计算器");
//获得目标进程句柄
DWORD TID,PID;
TID = ::GetWindowThreadProcessId (hStart, &PID);
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,PID); //这里用PID和TID都不对,用NULL可以对所有线程设钩子
//g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInst,0);
}
请问高手,怎么向一个指定窗口下钩子,比如“计算器”窗口?
“g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,PID); //这里用PID和TID都不对,用NULL可以对所有线程设钩子 ”我现在钩子已经能用了,看这个注释“用NULL可以对所有线程设钩子”
GetWindowThreadProcessId(hWnd, &dwThreadID);
另外你在通过FindWindow找到“计算器”对应的HWND,
对比两个HWND,你就可以知道你当前钩住的消息是不是“计算器”的了.