我遇到了一个奇怪的问题。我正在为我正在开发的c#应用程序创建两个钩子,一个用于键盘,一个用于鼠标,使用以下代码:
//keyboard
SetWindowsHookEx(13, keyBoardDelegate, IntPtr.Zero, 0);
//mouse
SetWindowsHookEx(14, mouseDelegate, IntPtr.Zero, 0);
鼠标和键盘钩子程序代码看起来与第一个参数和委托相同。
一切正常我在用户使用鼠标或键盘时收到通知。在我使用代码
激活主窗口顶部的小问题(帮助)按钮后出现问题 this.HelpButton = true;
this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AutoStandBy_HelpButtonClicked);
每当我点击窗口顶部的帮助按钮时,我的表格会冻结一段时间,然后它会响应并执行AutoStandBy_HelpButtonClicked
功能中的代码。为了阻止我的冻结申请,我必须删除鼠标SetWindowsHookEx
功能,而不是键盘的SetWindowsHookEx
。过去几天我一直在与这个问题作斗争,没有运气。有没有人知道如何解决这个问题?
private IntPtr MouseHookDelegate(Int32 Code, IntPtr wParam, IntPtr lParam)
{
/// Call CallNextHookEx so we do not break the hook
if (Code < 0)
return CallNextHookEx(mouseHandle, Code, wParam, lParam);
/// if a mouse change occured then call the mouse event
if (MouseMoved != null)
MouseMoved(this, new EventArgs());
/// Call CallNextHookEx so we do not break the hook
return CallNextHookEx(mouseHandle, Code, wParam, lParam);
}
然后以我的主要形式
mi = new MouseInput();
///register the mouse event to check for movement
mi.MouseMoved += mouse_MouseMoved;