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. ]


Anmelden zum Antworten