我正在使用最初发布为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)似乎没有其他人出现此问题。
有人可以解释: