我正在尝试使我的钩子在一个进程中全局工作,当我将hMod和dwTID设置为0 时,它对我使用_LL(LowLevel)工作.
有没有办法让它在没有.dll的情况下工作?
这是不可能的.几乎在每个讨论或提供MSDN上的全局挂钩示例的地方都提到了这个要求.一些例子:
...可以在与调用线程相同的桌面中的任何应用程序的上下文中调用全局钩子过程,因此该过程必须位于单独的DLL模块中....
...您必须在与安装钩子过程的应用程序分开的DLL中放置一个全局钩子过程....
...所有全局钩子函数必须在库中....
请注意,原因可能是代码可以根据文档在其他应用程序的上下文中运行,但情况并非总是如此 - 文档中也提到了这一点.来自SetWindowsHookEx:
...请注意,可以在安装挂钩的线程上调用WH_MOUSE,WH_KEYBOARD,WH_JOURNAL*,WH_SHELL和低级挂钩,而不是处理挂钩的线程....
我真的不知道有什么可以真正意味着该声明.它有时是那种方式,有时是另一种方式,但我只进行了一次测试,并且在安装钩子的线程的上下文中确实调用了钩子过程,从而不需要任何进程间通信.但这并不会改变对dll的要求.
低级钩子的处理完全不同.正如在文档中某种程度上所解释的那样,对钩子的调用是通过向安装了钩子的线程发送消息然后将上下文切换到该线程来完成的 - 这不需要安装dll.