如何捕获面板外的鼠标单击

时间:2011-04-23 11:05:49

标签: c# c#-4.0 windows-forms-designer

如何在Windows窗体应用程序中捕获面板外的鼠标?

3 个答案:

答案 0 :(得分:3)

要捕获全局鼠标和键盘事件,您需要捕获Windows消息WM_MOUSE_LL和WM_KEYBOARD_LL,而不仅仅是WM_MOUSE和WM_KEYBOARD。这些事件只能在NT / 2000 / XP中捕获。在以后的操作系统版本中,这是不可能的(出于相当明显的安全原因,我认为)。

如果你使用的是NT / 2000 / XP,这里有一些示例代码:

http://www.codeproject.com/KB/cs/globalhook.aspx

答案 1 :(得分:1)

答案在您的问题中,将面板的Capture属性设置为true。现在,即使鼠标位于面板窗口之外,所有鼠标输入事件也会定向到面板。然而,这是一个临时条件(应该是),单击按钮将在单击传递到面板后取消捕获。 MouseCaptureChanged事件可以让您知道发生的时间。无条件捕获鼠标不是一个选项,例如键入Ctrl + Esc将始终取消它。

答案 2 :(得分:0)

您可以处理表单本身的MouseClick事件。

class YourForm : Form
{
    protected override void OnMouseClick(MouseEventArgs e)
    {
        base.OnMouseClick(e);

        // Do something.
    }
}