mit THotKey globale Hooks vergeben



  • Du hast ja gar nicht die Variable 'key' verwendet und einen String kannst du nicht einfach in eine Zahl per Cast umwandeln.
    So wäre es schon richtiger:

    GetPrivateProfileString("shortcut","key","50",key,&groesse_sc,ini_path.c_str());
    HotKey->HotKey=StrToInt(key);
    

    Aber viel eleganter geht es mit der Klasse TIniFile...



  • THX, hab ich wohl übersehen, war ja auch schon spät^^

    So gehts 😃 THX



  • Ich möchte jetzt 2 Hotkeys vergeben. Dazu habe ich dieses Hier erneut verwendet, jedoch mit anderen Variablennamen:

    Exit_HotKeyIdentifier_uint = GlobalAddAtom("Exit-Hotkey");
    Exit_HotKeyModifier_uint = MOD_ALT;
    RegisterHotKey(Handle, Exit_HotKeyIdentifier_uint, Exit_HotKeyModifier_uint, 89 /* ist "Y" */); 
    
    UnregisterHotKey(Handle, Exit_HotKeyIdentifier_uint);
    GlobalDeleteAtom(Exit_HotKeyIdentifier_uint);
    

    Jetzt möchte ich in

    void __fastcall TForm1::WMHotKey(TMessage &Msg)
    {
        TForm::Dispatch(&Msg);
    }
    

    Abfragen, welche Tasten nun gedrückt wurden, die vom ersten Hotkey, oder die vom zweiten. Oder kann man alle Tastendrücke dadrin überprüfen?? Dazu müsste man aus Msg die Modifiers und die andere gedrückte Taste auslesen. Aber wie? Ich hab das schon mit GetKeyNameText versucht, kriegs aber nicht hin. 😞

    Noch ne Frage: Was tut TForm::Dispatch?



  • hmm..., ich hätt' schon gern ne Antwort^^



  • Schau einfach mal in die Windows SDK-Hilfe (oder alternativ in der MSDN) zum Stichwort "WM_HOTKEY".
    Dort sind die Parameter der Message erklärt, welche du dann nur noch abfragen müßtest.

    Und TObject::Dispatch() leitet einfach die Botschaft (Message) an den Vorgänger des Objekts solange weiter, bis jemand die Botschaft verarbeitet, d.h. wenn du selbst die Botschaft abarbeitest, dann brauchst du Dispatch nicht aufrufen.



  • Also die Taste krieg ich raus, aber nicht, ob noch z.B. alt oder Strg dazu gedrückt wurde. Kann mir jemand helfen?



  • // Doppel-Post



  • modifiers = (UINT)LOWORD(lParam);
    
    if(modifiers & MOD_ALT) // alt. MOD_CONTROL, MOD_SHIFT oder MOD_WIN
    {
    
    }
    


  • thx

    //Wo ist das Problem mit "Doppel-Posts"??



  • Meinen Eintrag hatte er aus Versehen doppelt eingetragen, so daß ich den zweiten gelöscht habe. Hatte nichts mit dir zu tun -)


Anmelden zum Antworten