我已经制作了一个鼠标低级钩子,除了一个问题之外它工作正常:程序的参数。
这是我的代码:http://pastebin.com/X2198UTb
My HookProc位于我评论的代码中间。
这是一个问题还是它应该是这样的?如果它应该是这样 - 我怎么知道哪个窗口应该得到正确的点击? ///我添加了激活事件的条件 - 右键单击。
答案 0 :(得分:1)
您的代码非常混乱,因为您声明WH_MOUSE常量具有值14. WH_MOUSE实际上具有值7,而14是WH_MOUSE_LL的值(是的,我知道您写了“低级别”你的问题)。
但是接下来你继续使用WH_MOUSE相关类型。具体来说,WH_MOUSE_LL挂钩的钩子过程接收MSLLHOOKSTRUCT结构,而不是你正在使用的MOUSEHOOKSTRUCT。
另外,正如Hans和Tergiver暗示的那样,你应该传递自己代码的模块句柄,而不是User32.dll。尝试使用Marshal.GetHINSTANCE(typeof(globalMouse).Module)。
答案 1 :(得分:0)
这甚至根本不起作用。如果您在纯本机应用程序中尝试相同的操作(使用LoadLibrary(“User32”)和线程ID为0),它只会在短时间内工作。
使用全局钩子需要本机(无C#)DLL。这比看起来要复杂得多,特别是如果您希望它在64位Windows上工作,您需要32位和64位注入DLL以及32位和64位注入过程。