我需要将一个dll注入一个或多个外部进程,我也想从中拦截keybord事件。这就是为什么使用带有WH_KEYBOARD的SetWindowsHookEx看起来只是一步到位的简单方法。
现在我真的不想在我只对一些选定的进程感兴趣时安装一个全局钩子,但是Windows钩子似乎是全局的或者只是线程的。
我现在的问题是如何正确设置流程范围的挂钩。
我想有一种方法是从我的应用程序设置目标进程'主线程上的钩子,然后在DLL_PROCESS_ATTACH上为我所有其他正在运行的线程执行相同的操作(以及稍后启动的线程的DLL_THREAD_ATTACH) 。 但这真的是一个好方法吗?更重要的是,有没有更简单的方法来设置流程范围的钩子?我的想法看起来很麻烦而且很难看,但我无法找到任何关于在任何地方这样做的信息。
答案 0 :(得分:2)
查看此post中的代码,它有一些不错的代码可以执行您想要的操作。这使用了一个全局钩子,这在你的情况下是最好的。
修改强>
回答Ben的评论,想知道如何将钩子注入特定进程以观察特定线程:
不要忘记重复每个要挂钩的进程。 另外,请确保您的钩子代码为钩子进程处理线程创建/删除,因此您也可以挂钩这些线程。
如果您读到全局WH_KEYBOARD挂钩是一个坏主意,您可以开始明白为什么这种方法可能会更糟。