C#:全局鼠标事件处理程序仅触发一次

时间:2018-09-23 01:54:38

标签: c# hook

我正在使用最初发布为here的全局鼠标事件处理程序。

原始问题中发布的代码可以完美地工作,只是由于某种原因,当我使用它时,它仅被触发一次。 (在那之后,它再也不会被触发。)

// Subscribe to Event, (placed this in constructor)
MouseHook.Start();  
MouseHook.MouseAction += new EventHandler(Event);

// ...

// This function only gets triggered once
private void Event(object sender, EventArgs e)
{
   // Do something
}

但是,通过一些实验,我确实使它能够正常工作,因此每次单击鼠标(不仅仅是第一个鼠标)都会触发它。

我从此更改了功能:

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
    {
       MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));  
       MouseAction(null,new EventArgs());
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

对此:

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
    {
       MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));  
       MouseAction(null,new EventArgs());

       // Added these two lines, works perfectly now
       stop();
       Start();
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

但是我不知道为什么1)我需要为代码添加这些额外的行,以及2)似乎没有其他人出现此问题。

有人可以解释:

  1. 为什么我首先遇到这个问题,
  2. 上面显示的“解决方法”是否有效?

0 个答案:

没有答案