有谁做过NT或者Window2k下的Hook

sor 2001-10-23 11:49:07
我想做一个全局键盘Hook,使用SetWindowsHookEx函数
HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // handle to application instance
DWORD dwThreadId // thread identifier
);

其中的idHook 有一个可选值是WH_KEYBOARD_LL,其说明是
WH_KEYBOARD_LL
Windows NT/2000: Installs a hook procedure that monitors low-level keyboard input events. For more information, see the LowLevelKeyboardProc hook procedure.
可是我找遍了我的硬盘,都没有找到WH_KEYBOARD_LL 的定义

还有参数dwThreadId 的说明是
dwThreadId
[in] Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.

但当我指定这个参数为0时,程序一运行连VB都关了,即使我指定其值为App.ThreadID,程序运行也很不正常,经常死
...全文
120 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArmorCar 2001-10-23
  • 打赏
  • 举报
回复
1.WH_KEYBOARD_LL=13
2.You can use WH_KEYBOARD instead of WH_KEYBOARD_LL if you wanna create a thread associated hook,but if you wanna create a global hook...
3.WH_KEYBOARD_LL is a global hook,So your HookProc MUST IN A DLL.You can use LoadLibary & GetProcAddress to retieve the HookProc address.
sor 2001-10-23
  • 打赏
  • 举报
回复
to gameboy999:
如果dwThreadId指定为本程序的ThreadID,这个Hook就不能截获程序以外的消息,怎么办?
而且MSDN上说,这个参数指定为0的话,这个Hook和所有运行的线程关联
你有成功的例子吗?给我发一个,sor@263.net
gameboy999 2001-10-23
  • 打赏
  • 举报
回复
g_hHook = ::SetWindowsHookEx(WH_MOUSE,MouseHookProc,(HINSTANCE)NULL,::GetCurrentThreadId());

如上面,dwThreadId当然是hook所在的线程id咯


而且MSDN上说得挺清楚:
WH_MOUSE_LL Global only
这就说明这个钩子只能放在dll中~~~ 所以。。。。。。


不过WH_KEYBOARD_LL 的定义我好像也找不到哦 @@ :p

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧