[英]Cursor movement event outside of wpf window boundaries
有沒有一種方法可以檢測到WPF窗口之外的光標移動事件? 我不是要找出光標是否移到窗口之外,我只是想繼續訂閱移動事件,即使鼠標移到wpf窗口邊界之外。 我已經找到了很多與窗口內移動有關的東西,但窗口外沒有任何東西(至少沒有實際起作用的東西)。 即使問題在詢問外部運動,它們基本上都只能在窗口內工作。
由於到目前為止我還沒有找到解決方案,所以我一直在使用下面構想出的代碼。 我不確定這段代碼的效率如何。 我認為,如果系統已經在檢查鼠標的移動,則添加單獨的檢查效率不高。 但是,由於找不到任何好的參考資料,因此我無法使用系統部分。
注意:我正在嘗試找出執行此操作的現有方法。 我的代碼工作正常,但效率可能很低,因為如果系統中已經存在一個事件可以生成代碼,我可以訂閱該事件,那么這個額外的計時器循環就是在浪費額外的資源。 我並不是要檢測鼠標是否移動到邊界之外,而只是想記錄坐標,無論鼠標在屏幕上的位置如何。 因此,如果鼠標在遠離我的應用程序窗口的第二個監視器上移動,我仍然希望觸發事件並發生通知。 我的計時器實現報告始終保持協調狀態,但是我想確保不在已經完成工作的對象之上添加額外的圖層。 根據評論者和我收到的答復,這似乎是一個很大的困惑。
public MainWindow()
{
InitializeComponent();
InitializeCursorMonitoring();
}
private void InitializeCursorMonitoring()
{
var point = System.Windows.Forms.Cursor.Position;
var timer = new System.Windows.Threading.DispatcherTimer();
timer.Tick += delegate
{
if (point != System.Windows.Forms.Cursor.Position)
{
point = System.Windows.Forms.Cursor.Position;
System.Diagnostics.Debug.WriteLine(String.Format("X:{0} Y:{1}",
System.Windows.Forms.Cursor.Position.X,
System.Windows.Forms.Cursor.Position.Y));
}
};
timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
timer.Start();
}
正如其他人所提到的,您需要捕獲鼠標。 這是根據您的代碼進行說明的示例:
private void InitializeCursorMonitoring()
{
var point = Mouse.GetPosition(Application.Current.MainWindow);
var timer = new System.Windows.Threading.DispatcherTimer();
timer.Tick += delegate
{
Application.Current.MainWindow.CaptureMouse();
if (point != Mouse.GetPosition(Application.Current.MainWindow))
{
point = Mouse.GetPosition(Application.Current.MainWindow);
Console.WriteLine(String.Format("X:{0} Y:{1}", point.X, point.Y));
}
Application.Current.MainWindow.ReleaseMouseCapture();
};
timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
timer.Start();
}
在獲取位置之前捕獲鼠標以獲取屏幕上任何位置的位置,然后在釋放鼠標以恢復正常的鼠標功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.