Fragensteller
Windows Events mit WPF abfangen?

Allgemeine Diskussion
-
Ich muss (leider) auf sehr viele Windows-Events achten, unter anderem WM_KEYDOWN und WM_DESTROY. Ich wollte dazu eine eigene Klasse dafür schreiben:
class WinEvent { public WinEvent(IntPtr Handle) { _Handle = Handle; HwndSource source = HwndSource.FromHwnd(Handle); source.AddHook(new HwndSourceHook(WndProc)); } ... private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { switch(msg) { case (int)WinMsg.WM_DESTROY: if (WM_DESTROY != null) WM_DESTROY(this, new EventArgs()); break; case (int)WinMsg.WM_KEYDOWN: if (WM_KEYDOWN != null) WM_KEYDOWN(this, new LParamEventArgs(lParam)); break; } return IntPtr.Zero; } public event EventHandler<EventArgs> WM_DESTROY; public event EventHandler<LParamEventArgs> WM_KEYDOWN; }
Testweise habe ich mir eine Anwendung erstellt, die auf das WM_KEYDOWN Ereignis hören soll:WinEvent wEvent; public MainWindow() { InitializeComponent(); } private void OnLoaded(object sender, RoutedEventArgs e) { wEvent = new WinEvent(new WindowInteropHelper(Application.Current.MainWindow).Handle); wEvent.WM_KEYDOWN += new EventHandler<LParamEventArgs>(wEvent_WM_KEYDOWN); } void wEvent_WM_KEYDOWN(object sender, LParamEventArgs e) { MessageBox.Show("WM_KEYDOWN"); } }
Das Event wird jedoch, immer nur dann ausgelöst, wenn mein Fenster den Focus hat. Aber ich muss ja auch die Events von anderen Fenstern empfangen. Was mache ich falsch???- Typ geändert Robert BreitenhoferModerator Donnerstag, 24. Mai 2012 13:36 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
Hallo Dev6464,
Adding a system-wide keyboard hook to your WPF Application (“...A global keyboard hook is, as the name suggests, a means for your application to intercept (or ‘hook’) all keyboard events, not just those that occur when your application has focus...”)
Nochmals eine Antwort von Nick Kramer zu der Frage: How to intercept a Win32 Message in WPF App? „…No, there's no "native" WPF API for that. Not every window message has a WPF equivalent -- there's a lot of window messages that have nothing to do with presentation and UI.”
Noch zum lesen:
- Getting keyboard messages in WindowsFormsHost when win form controls do not have focus
- Using global keyboard hook (WH_KEYBOARD_LL) in WPF / C#
- https://gist.github.com/471698
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
****************************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
****************************************************************************************************************Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.