2011-08-01 88 views
4

我有一個小視頻應用程序,我想給類似vlc的功能。由此,我的意思是讓某個元素消失並出現在鼠標移動或鼠標不移動的位置。我對如何做到這一點有一個粗略的概念,但我沒有ideea如何檢測鼠標是否在移動。我想過使用GetPosition函數,但這隻會給我鼠標的位置,不會讓我知道光標是否在移動。我想用一個計時器在鼠標停止移動後的2-3秒內倒計時,然後淡出控制系統或使其崩潰。我無法每隔1毫秒檢查一次位置變量的值。有沒有其他方法可以做到這一點?如何檢測鼠標是否在WPF/C#中的窗口範圍內移動?

回答

3

你可以使用掛鉤功能,所以你會通知當鼠標移動時,我使用this免費開源庫。

如何使用它:

using Gma.UserActivityMonitor.GlobalEventProvider; 

GlobalEventProvider _globalEventProvider1 = new Gma.UserActivityMonitor.GlobalEventProvider(); 

this.globalEventProvider1.MouseMove += HookMouseMove;//to listen to mouse move 
+0

感謝您的鏈接和庫。會嘗試一下,讓你知道,但我不想用鉤子,除非作爲最後的手段。 – lorddarq

+0

我將使用這個開源庫。這似乎是2的方式。 – lorddarq

+0

是的,它值得。但是請注意,如果您只想爲應用程序掛鉤而不是整個系統,則應該將使用WH_MOUSE_LL的行更改爲WH_MOUSE,將WH_KEYBOARD_LL更改爲WH_KEYBOARD,我記得它們只是一對圖書館中的線條。 –

0

捕獲鼠標。如果用戶實際在其他地方點擊,則釋放捕獲。然後你可以使用標準的WPF鼠標移動事件。

myElement.MouseMove += (my MouseMove handler) 
Mouse.Capture(myElement); 
+0

我不認爲捕捉鼠標是必要的,即使鼠標移動到某個其他元素上,如「MediaElement」等,PreviewMouseMove仍然會到達「Window」。或者還有其他一些情況我不考慮在這裏嗎? –

+0

如果你沒有完成應用程序,它不會。我使用捕獲,因爲例如用戶從應用程序中拖出一個選擇。 –

+0

好的,你說得對。在這種情況下,我認爲你也可以在'Window'上使用'MouseEnter' /'MouseLeave'事件。 –

相關問題