Post by Dietmar BraunHi,
ich habe eine StayOnTop-Anwendung, die nicht immer den Fokus hat.
Wie erreiche ich es, dass sie Hotkeys trotzdem "mitbekommt"? Also
quasi globale Hotkeys?
Laesst sich dies sogar so "verfeinern", dass diese Hotkeys nur von
meiner Anwendung verarbeitet werden, damit nicht in anderen laufenden
Applikationen evtl. unerwuenschte "Nebeneffekte" (z.B. durch
Ausloesen einer Funktion durch den Hotkey) auftreten?
Dank und Gruss,
Dietmar
Eine Windows-Anwendung kann die API-Funktion RegisterHotkey verwenden,
um eine Tastenkombination für sich zu registrieren. Man gibt bei der
Registrierung ein Fenster-Handle an (z. B. die Handle-Eigenschaft des
Mainforms) und dieses Fenster bekommt dann ein WM_HOTKEY-Meldung, wenn
der Benutzer die Tastenkombination drückt.
Geh mal nach http://www.codenewsfast.com und suche nach RegisterHotkey,
da sollte sich einiges an Beispielen finden lassen.
Siehe auch
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309%28v=vs.
85%29.aspx für die offizielle Dokumentation.
Die Funktion schlägt fehl, wenn die Tastenkombination schon von einer
anderen Anwendung registriert worden ist. Da das OS die Registrierung
nicht automatisch löscht, wenn die registrierende Anwendung beendet
wird, ist es essentiell, UnregisterHotkey aufzurufen, um die
Registrierung (wenn sie denn erfolgreich war) wieder zurückzunehmen. Da
sich das Handle eines Delphi-Forms während der Lebenszeit des Forms
ändern kann ist es ratsam, die CreateWnd und DestroyWnd-Methoden zu
überschreiben. In CreateWnd ruft man RegisterHotkey *nach* inherited
auf, in DestroyWnd UnregisterHotkey *bevor* inherited.
Soweit ich weis bekommt eine Anwendung den registrierten Hotkey bevor
die aktuelle Vordergrundanwendung ihn überhaupt sieht, man kann damit
also wirklich Funktionalität in der aktiven Anwendung blockieren.
Es gibt noch einen zweiten Mechanismus für Hotkeys: die WM_SETHOTKEY
Message. Siehe
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646284%28v=vs.85%29.aspx
Falls deine Anwendung in den Vordergrund kommen soll, wenn der Benutzer
die registrierte Tastenkombination drückt, ist das eventuell die
bessere Wahl, da sich eine Anwendung schon seit einigen
Windows-Versionen nicht mehr so einfach selbst in den Vordergrund
drängeln kann...
--
Peter Below