2010-01-20 9 views
6

Czy mimo to klasa może złapać ostatnie kliknięcie w aplikacji? Coś takiego jakWPF. Złap ostatnie okienko kliknij gdziekolwiek

public class MyClickManagerClass 
{ 
    public MyClickManagerClass() 
    { 
     // subscribe to a global click event 
    } 

    private void GlobalClickEventHandler(object sender, EventArgs e) 
    { 
     // do something with the click here 
    } 
} 

Dziękujemy za poświęcony czas!

Odpowiedz

12

Jeśli zależy Ci tylko na przechwytywaniu kliknięć myszy w dowolnym miejscu w danym Window, subskrybowanie MouseDown lub PreviewMouseDown na poziomie okna rozwiązuje problem.

Jeśli naprawdę chcesz go mieć globalny do aplikacji (a nie tylko do okna), należy zapisać się na razie InputManager.PreProcessInput lub InputManager.PostProcessInput i obserwować zdarzenia myszy:

public MyClickManagerClass() 
{ 
    InputManager.Current.PreProcessInput += (sender, e) => 
    { 
    if(e.StagingItem.Input is MouseButtonEventArgs) 
     GlobalClickEventHandler(sender, 
     (MouseButtonEventArgs)e.StagingItem.Input); 
    } 
} 

Zauważ, że „nadawca "zawsze będzie InputManager, ale możesz mapować współrzędne do innych kontrolek za pomocą MouseEventArgs.GetPosition(visual).

+0

Działa naprawdę dobrze! Dzięki! Tylko jedna uwaga, to: InputManager.Current.PreProcessInput – Carlo

+0

Dzięki. Poprawiłem kod w mojej odpowiedzi. –