Tasten - Systemweite Hotkeys à la ICQ
-
In diesem Zusammenhang ist auch diesem beitrag Beachtung zu schenken: Tasten - systemweit abfangen (Hooks)
Es gibt aber auch eine Lösung mit RegisterHotKey:
- Zunächst schreibst du beim OnCreate Event des betroffenen Formulars folgendes:
HotKeyIdentifier_uint = GlobalAddAtom("F3-Hotkey"); HotKeyModifier_uint = 0; RegisterHotKey(Handle, HotKeyIdentifier_uint, HotKeyModifier_uint, VK_F3); //Hotkey registrieren.
Das registriert den Hotkey Systemweit.
- In den OnDestroy Event schreibst du folgendes rein:
UnregisterHotKey(Handle, HotKeyIdentifier_uint); //HotKey löschen GlobalDeleteAtom(HotKeyIdentifier_uint); //HotKey Identifier löschen
Das löscht den Hotkey wieder aus dem System.
- In den Private-Teil der Formularklasse schreibst du:
/* Eine eindeutige ID für den Hotkey suchen. Der String ist egal. * * Sinnvollerweise beschreibend zum Hotkey. Diese ID wird auch benötigt, wenn * * man den Hotkey zerstören will. Daher sollte der Wert irgendwo in der Klasse* * welche den HotKey verwaltet gespeichert werden. */ unsigned int HotKeyIdentifier_uint; /* Die Modifier sind die Tasten welche zusätzlich auch noch gedrückt werden * * müssen. Also z.B. Control oder so. Hier ist es keine (0). Um genauere * * Info zu erhalten musst du einfach in der Hilfe unter "RegisterHotKey" nach * * lesen. (Windows SDK Hilfe) */ unsigned int HotKeyModifier_uint; /* Funktionsdeklaration des Message-Handlers */ void __fastcall WMHotKey(TMessage &Msg);
- Ans Ende des Public-Teils der Formularklasse fügst du das hier an:
/* MessageMap, damit das Form auch weiss, wo die Message hin geschickt werden soll */ BEGIN_MESSAGE_MAP /* MESSAGE_HANDLER(<Nachrichtenname>, <Nachrichtentyp>, <Handler-Funktionssname> */ MESSAGE_HANDLER(WM_HOTKEY, TMessage, WMHotKey) END_MESSAGE_MAP(TForm)
- In die Implementierungsdatei gehört dann die Implementierung des Message-Handlers.
//--------------------------------------------------------------------------- void __fastcall TForm1::WMHotKey(TMessage &Msg) { TForm::Dispatch(&Msg); //--TODO: Gewünschten Code einfügen } //---------------------------------------------------------------------------
Und fertig ist das Wunderding.
-junix
[ Dieser Beitrag wurde am 22.01.2003 um 15:01 Uhr von junix editiert. ]