如何在不收听框架控件中定义的任何鼠标事件的情况下检测鼠标点击?

是否可以在不收听框架控件中定义的任何鼠标事件的情况下检测鼠标点击?

我的意思是,我不想写代码如下:

control.MouseLeftButtonDown += this.HandleMouseLeftButtonDown; 

但我想知道用户是否点击了屏幕。 是否有可能在C#(WPF或Silverlight)?

您可以在主窗口的静态构造函数中注册类处理程序,例如:

 static MainWindow() { EventManager.RegisterClassHandler(typeof (MainWindow), Mouse.MouseDownEvent, new MouseButtonEventHandler(OnGlobaMouseDown)); } 

它将是所有MouseDown事件的全局处理程序。

您可以使用Win32 API并检测鼠标消息WM_MOUSE,如下所示:

http://support.microsoft.com/kb/318804

或者此示例显示使用全局鼠标消息WM_MOUSE_LL:

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

这是通过捕获鼠标来完成的。 这会强制任何鼠标事件指向您,即使它移动到窗口之外。 Mouse.Capture()方法。

如果需要处理所有应用程序的鼠标事件,最好的方法是订阅InputManager事件。

“我的意思是,我不想写代码如下:

control.MouseLeftButtonDown + = this.HandleMouseLeftButtonDown;“

你可以随时使用:

 if (Mouse.LeftButton == MouseButtonState.Pressed) { ... } 

你需要包括这个。

 using System.Windows.Input; 

这在wpf中对我有用。