2010-01-20 7 views
6

Gibt es trotzdem, dass eine Klasse den letzten Klick in der Anwendung fangen kann? Etwas wieWPF. Fang das letzte Fenster irgendwo klicken

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

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

Vielen Dank für Ihre Zeit!

Antwort

12

Wenn Sie nur Mausklicks an einer beliebigen Stelle in einem gegebenen Window erfassen möchten, genügt es, die MouseDown oder PreviewMouseDown auf Fensterebene zu abonnieren.

Wenn Sie es wirklich für die Anwendung global sein wollen (und nicht nur auf das Fenster), sollten Sie auf die InputManager.PreProcessInput oder InputManager.PostProcessInput Ereignis abonnieren und für Mausereignisse beobachten:

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

Beachten Sie, dass „Absender "wird immer der InputManager sein, aber Sie können Koordinaten anderen Steuerelementen mit MouseEventArgs.GetPosition(visual) zuordnen.

+0

Funktioniert wirklich gut! Vielen Dank! Nur eine Anmerkung, es ist: InputManager.Current.PreProcessInput – Carlo

+0

Danke. Ich habe den Code in meiner Antwort korrigiert. –