WinForms鼠标捕获

时间:2010-05-21 18:31:40

标签: c# winforms

我有Windows窗体应用程序,我需要捕获窗口外的鼠标移动。我的窗口类中的简化代码是:

private void ButtonOnClick(object sender, EventArgs e)
{
    Capture = true;
    MouseMove += OnMouseMove;
}

private void OnMouseMove(object sender, MouseEventArgs e)
{
    Console.Out.Write("!");
}

如你所见,当用户按下按钮时,我的程序应该开始跟踪鼠标(即使它在窗口之外 - 这是一个关键特征!)但是我的行为非常奇怪。如果我在窗口内移动鼠标,一切都很棒,会写入控制台。但是当我将鼠标移到窗口外时,只有OnMouseMove被调用一次(并且该点实际上在外面)。然后,如果我将鼠标移动到窗口外的任何地方,它就不再被调用了。如果我将鼠标返回窗口,一切都很完美。离开 - 1条消息,在窗口中移动 - 好的。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

你需要一个全局鼠标钩子。我建议你先读一些关于钩子的东西,比如说。在MSDN。可以在CodeProject找到C#中的示例实现。

希望有所帮助。