为什么我设置的全局鼠标钩子只能截获当前进程的鼠标事件?
BOOL CMouseHook::starthook()
//安装钩子并设定接收显示窗口句柄
{
BOOL bResult=FALSE;
HWND hWnd = FindWindow (NULL , "MYSoft Record") ;
DWORD dwPID , dwThreadID ;
dwThreadID = GetWindowThreadProcessId (hWnd , &dwPID) ;
//当如下设置时截获不了"MYSoft Record"的鼠标事件,即使dwThreadID设为0也不行,如果为0只能截获当前进程的鼠标事件,而"MYSoft Record"是我写的里面并没有钩子的操作.钩子已经放在dll里.
glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,dwThreadID);//
return bResult;
}
问题点数:100、回复次数:11Top
1 楼zwzz541(木鱼)回复于 2005-04-25 12:21:43 得分 5
应该你的钩子设置的是当前线程的IDTop
2 楼littlebao(爱拼才会赢)回复于 2005-04-25 12:43:42 得分 0
线程ID不是当前的,即使设为0也不行啊.Top
3 楼potshot(山河)回复于 2005-04-25 13:07:34 得分 5
参考一下<Windows 核心编程>里的例程,
要 HOOK 所有进程要改写所有已经装载和即将装载的所有调用目标 API 的模块,jeffery 为我们写好了一个累在那个例子里,可以直接拿来用.Top
4 楼Fzergling(十二年的轮回)回复于 2005-04-25 13:28:36 得分 5
全局钩子要在DLL中Top
5 楼aspcom(牧野流星)回复于 2005-04-25 13:58:18 得分 5
#pragma data_seg("ShareData")
HINSTANCE glhInstance = NULL;
#pragma data_seg()Top
6 楼littlebao(爱拼才会赢)回复于 2005-04-25 15:19:56 得分 0
已经在dll里了,也有一下代码了:
#pragma data_seg("ShareData")
HINSTANCE glhInstance = NULL;
#pragma data_seg()
奇怪啊!!!!Top
7 楼wangk(倒之)回复于 2005-04-25 16:31:16 得分 5
SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);// 0 代表所有线程Top
8 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-25 16:42:04 得分 10
SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);
用0来表示全局Top
9 楼Fzergling(十二年的轮回)回复于 2005-04-25 16:49:16 得分 0
MFCDLL还是WIN32DLL?
glhInstance赋予模块值没有?Top
10 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-04-25 18:14:34 得分 10
SetWindowsHookEx最后一个参数设置为0即可。
回调函数放在DLL里面。Top
11 楼quanbaoxiao(永不言败)回复于 2005-04-27 18:00:52 得分 55
放dll里Top




