C# HookProc参数-null

C# HookProc参数-null,c#,hook,C#,Hook,我制作了一个鼠标低级钩子,除了一个问题:程序的param 这是我的密码: 我的HooPoC位于我的注释下面的代码中间。 这是个问题还是应该是这样?如果是这样的话-我怎么知道哪个窗口应该右键单击?//我添加了一个条件来激活事件-右键单击。这根本不应该起作用。如果您在纯本机应用程序中尝试相同的操作(使用LoadLibrary(“User32”)和线程id 0),它只会在短时间内起作用 使用全局钩子需要本机(无C#)DLL。这比看起来要复杂得多,特别是如果您希望它在64位窗口上工作,您需要32位和64

我制作了一个鼠标低级钩子,除了一个问题:程序的param

这是我的密码:

我的HooPoC位于我的注释下面的代码中间。


这是个问题还是应该是这样?如果是这样的话-我怎么知道哪个窗口应该右键单击?//我添加了一个条件来激活事件-右键单击。

这根本不应该起作用。如果您在纯本机应用程序中尝试相同的操作(使用LoadLibrary(“User32”)和线程id 0),它只会在短时间内起作用


使用全局钩子需要本机(无C#)DLL。这比看起来要复杂得多,特别是如果您希望它在64位窗口上工作,您需要32位和64位注入DLL以及32位和64位注入进程。

您的代码非常混乱,因为您声明了WH_MOUSE常量的值为14。WH_MOUSE的值实际上是7,14是WH_MOUSE_LL的值(是的,我知道你在问题中写了“low level”)

但是你可以继续使用WH_鼠标相关类型。具体来说,WH_MOUSE_LL hook的hook过程接收的是MSLLHOOKSTRUCT结构,而不是您正在使用的MOUSEHOOKSTRUCT


此外,正如Hans和Tergiver所暗示的,您应该传入自己代码的模块句柄,而不是User32.dll。试着使用Marshal.GetHINSTANCE(typeof(globalMouse.Module)。

你说得对,它应该是鼠标的名称。如果我通过了你说的,它根本不起作用,也许如果我再创建一个dll,它会起作用,但User32.dll起作用。。。我能知道应该用您所指的结构接收消息的窗口句柄吗?(因为我看不到'hwnd'属性)不,在消息发布到目标线程的消息队列之前,会调用低级钩子。它还没有与一个特定的hwnd关联。接得好,我错过了7/14。我想知道这是怎么回事。