我想监视在运行时生成的Windows消息。为了实现这一点,我试图使用:
创建一个钩子hook = SetWindowsHookEx(HookId, delegatedfunction, IntPtr.Zero, 0);
当HookId
为WH_MOUSE_LL = 14
或WH_KEYBOARD_LL = 13
时,一切正常。上面的函数返回hook > 0
,我可以监视击键和鼠标事件。但是,当我选择HookId
,WH_CALLWNDPROC = 4
,WH_CALLWNDPROCRET = 12
等任何其他WH_SYSMSGFILTER = 6
时,上述函数会返回0
,并且不会监视任何内容。
我尝试了很多不同的东西,在这些情况下,唯一似乎正确创建钩子的是当我使用以下代码使用dll注入时:
hook = SetWindowsHookEx(HookId, del, GetModuleHandle(fileName), 0);
这个问题是我的应用程序在一段时间后崩溃,我不知道为什么会发生这种情况,因为我过去没有使用过dll注入。
有些人可以澄清以下任何内容:
1)任何想法为什么需要一个dll注入来创建钩子 那些情况?
2)当我做一个dll时,我需要什么样的dll 注射?任何dll会不会或者我应该专门为我创建一个 情况?