为某个程序安装线程钩子

周晓荣 2011-09-13 10:12:25
线程钩子,非全局钩子,能否实现?

...全文
107 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
周晓荣 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 evi10r 的回复:]
SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);不过这个是全局的,要想对某个指定的进程生效可以在回调函数中判断下顶层窗口是否是你的目标程序
[/Quote]
这样效率不就影响到了。
能否就直接只捕捉某个进程(或者线程)的消息?不通过全局钩子的方式
W1nds 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 et214721856 的回复:]

引用 2 楼 evi10r 的回复:
什么类型的钩子
但是都能实现 只是方法会略有不同

SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, ::GetModuleHandle(NULL), g_threadId);

我是这样实现的,我在一个普通的win32程序中,为其他进程的线程加载钩子,但是一直报ERROR_HOOK_NEEDS_HMOD:C……
[/Quote]
普通的键盘钩子最好还是放到DLL中,GetModuleHandle(你的DLL的名字),这样其他窗口收到键盘消息后会加载你的DLL,当然钩子的回调函数也是在DLL中的
要想放到win32应用程序中可以使用低级键盘钩子
SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);不过这个是全局的,要想对某个指定的进程生效可以在回调函数中判断下顶层窗口是否是你的目标程序
周晓荣 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 evi10r 的回复:]
什么类型的钩子
但是都能实现 只是方法会略有不同
[/Quote]
SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, ::GetModuleHandle(NULL), g_threadId);

我是这样实现的,我在一个普通的win32程序中,为其他进程的线程加载钩子,但是一直报ERROR_HOOK_NEEDS_HMOD:Cannot set nonlocal hook without a module handle

意思是说,我没设置一个hmoudle参数,但是我不是已经通过::GetModuleHandle(NULL)设置了吗?
周晓荣 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tzxx 的回复:]

当然可以,SetWindowsHookEx的最后一个参数就是。

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 associa……
[/Quote]
所有进程的线程ID都唯一么?
tzxx 2011-09-13
  • 打赏
  • 举报
回复
当然可以,SetWindowsHookEx的最后一个参数就是。

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.
W1nds 2011-09-13
  • 打赏
  • 举报
回复
什么类型的钩子
但是都能实现 只是方法会略有不同

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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