我使用的是最初发布的全局鼠标事件处理程序
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);
}
有人能解释一下:
-
为什么我一开始就遇到这个问题
-
上面显示的“变通方法”有效吗?