Wie Kann Ich Überwachen, Welche Fenster Derzeit Den Tastaturfokus Hat.
Gibt es eine Möglichkeit um nachzuverfolgen, welche Fenster aktuell den Tastatur-Fokus hat. Ich damit umgehen könnte, WM_SETFOCUS für jedes Fenster, aber ich Frage mich, ob es eine alternative, einfachere Methode (d.h. eine einzelne Nachricht handler irgendwo).
Könnte ich OnIdle() in MFC und rufen GetFocus (), aber das scheint ein wenig hacky.
InformationsquelleAutor der Frage jmatthias | 2008-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also aus der Art, wie Sie formuliert die Frage, die ich bin, abzuleiten, dass Sie wollen, um eine Ereignisprozedur, die aufgerufen wird, sobald der Fokus wechselt zwischen den Fenstern. Sie möchten benachrichtigt werden, anstatt auf die Umfrage.
Glaube ich nicht, dass das aufrufen GetFocus von OnIdle ist, dass viel von einem hack - sicher abrufen, aber es ist low-overhead-polling ohne Nebenwirkungen - aber wenn Sie wirklich wollen, zu verfolgen, Windows Hooks sind wahrscheinlich die beste Wahl. Speziell können Sie einen CBT hook (WH_CBT) und hören für die HCBT_SETFOCUS Benachrichtigung.
Könnte man auch mit einem WH_CALLWNDPROC Haken und hören für die WM_SETFOCUS-Nachricht.
Je nachdem, ob Sie machen es zu einem globalen hook, oder app-lokal, Sie können verfolgen, konzentrieren sich über alle windows auf dem system, oder nur die windows-Besitz von Ihrem Prozess.
InformationsquelleAutor der Antwort
Wie über die Win32 -GetForegroundWindow?
InformationsquelleAutor der Antwort roomaroo
Gibt es eine einfache Möglichkeit mit .Net Framework 3.5 : die Bibliothek UI Automation bietet eine event-Fokus geändert, das feuert, jedes mal den Fokus ändern, um eine neue Steuerung.
Seite von MSDN
Beispiel:
Diese api in der Tat verwenden Sie windows Haken hinter die kulissen zu tun. Aber Sie haben zu verwenden .Net Framework...
InformationsquelleAutor der Antwort olorin
Wenn Sie die Programmierung .net 3.5, das automatisierungspaket olorin erwähnt, ist bei weitem die einfachste, aber hüten Sie sich vor der Verwendung in einem Programm, das selbst über eine Benutzeroberfläche, zumindest wenn der Benutzeroberfläche erfolgt in WPF -- die tracking-Fokus Haken verwirrt durch die Ereignisse in der eigenen app, schnell und sperren der Benutzeroberfläche. Ich schickte MS ein Fehlerbericht. Ich habe nicht beobachtet, das gleiche problem mit einem herkömmlichen Windows Forms-Benutzeroberfläche. Man könnte natürlich, setzen Sie den tracking-code in einer separaten Konsole app und verwenden Sie irgendeine Art von ipc zu übertragen die Informationen, die Sie benötigen.
Die verlockende alternative der Verwendung von Interop-Zugriff auf die Windows-Hook WH_CBT von C# wird nicht funktionieren -- die einzige Globale hooks, die du bei C# sind die Maus und Tastatur.
InformationsquelleAutor der Antwort vanmelle
Gut, dies ist vielleicht nicht sehr anmutig... aber Sie abrufen können, die aktuellen fokussierte Steuerung ziemlich einfach. So könnten Sie die Einrichtung eines timer fragt jede 1/2 Sekunde oder so "Wo ist der Fokus?"... Dann können Sie beobachten Veränderungen. Beispiel Delphi-code ist unten; es sollte Recht einfach zu adaptieren, da die eigentliche Arbeit wird in der Windows-API-Aufrufe.
InformationsquelleAutor der Antwort JosephStyons
http://msdn.microsoft.com/en-us/library/ms771428.aspx
Verfügt über ein Fenster den Fokus tracker sample.
InformationsquelleAutor der Antwort
Konnte man beobachten, Nachrichten für die WM_ACTIVATE Veranstaltung.
ref
InformationsquelleAutor der Antwort hometoast