2010-05-21 86 views
3

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

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

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

正如你看到的,当用户按下一个按钮,我的程序应该开始跟踪鼠标(哪怕是窗口外 - 这是一个关键featue!)但是我得到非常奇怪的行为。如果我将鼠标移动到窗口内,一切都很好,被写入控制台。但是当我将鼠标移动到窗口之外时,只有OnMouseMove被调用一次(并且该点真的在外面)。然后,如果我将鼠标移到窗外的任何位置,它就不会再被调用。如果我把鼠标还给窗户,一切都是完美的。走开 - 1条消息,在窗口中移动 - 确定。

任何人都可以帮忙吗?

回答

3

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

希望能有所帮助。

+0

谢谢!刚刚研究过来自CodeProject的解决方案,它完美的工作! – levanovd 2010-05-24 10:26:27