RegisterHotKey



  • Hi,

    ich habe von zwei Möglichkeiten gelesen einen
    systemweiten Hotkey einzurichten.
    RegisterHotKey und SetWindowsHookEx

    Ich habe mit noch keiner der beiden Möglichkeiten
    gearbeitet.
    Hat jemand von euch einen Link zur Hand, der
    einem mal genau erklärt wie man einen solchen
    RegisterHotKey benutzt ?

    Mit der Suche im Forum gab es einige Treffer,
    aber es war mir bislang nicht möglich da etwas
    lauffähiges draus zu machen. shame on me 😢

    Gruß
    Chris



  • Wo genau liegt denn dein Problem mit RegisterHotKey?



  • Hallo dEUs,

    ich habe folgenden Code hier irgendwo aus dem Forum entnommen.

    UINT m_bHot = GlobalAddAtom("A");
        m_bHot = RegisterHotKey(NULL,GlobalAddAtom("A"),NULL,'A');
    

    Mit GlobalAddAtom kann ich nicht so richtig was anfangen.
    Muss man da nicht noch irgendwie auf eine dll verweisen ?
    Kann ich den Code so in OnInitDialog übernehmen ?
    In dem Beispiel hier soll dann noch eine MessageBox ausgegeben
    werden,wenn denn nun "A" gedrückt wurde.

    Wie und wo leite ich nun das MessageBox-Ereignis ein?
    Muss ich noch zusätzlich mit einem Timer arbeiten?

    Sorry, wie du siehst habe ich wirklich keinen Plan von dieser
    Sache 🙄

    Irgendwann hab ich mal mit ner Art Hotkey gearbeitet,
    das war aber nicht systemweit (glaube mit HANDLE m_hAccel oderso)...

    Gruß
    Chris



  • du musst die Nachricht WM_HOTKEY abfangen.



  • Ok, hab folgendes in die Message_Map
    übernommen:

    ON_MESSAGE(WM_HOTKEY,afunktion)
    

    damit ist die Message dann ja mit der
    auszuführenden Funktion verknüpft.

    Dazu noch:

    afx_msg LRESULT afunktion(WPARAM wParam, LPARAM lParam);
    

    Dann in afunktion() die MessageBox definieren/aufrufen.

    Problem: es passiert beim drücken der "A"-Taste nichts.
    Irgendwas mach ich noch total falsch 😕

    Chris



  • http://www.codeproject.com/system/nishhotkeys01.asp?target=registerhotkey 🙂

    Da findest Du einen funktionierenden Sourcecode und auch die Erklärung bezüglich "GlobalAddAtom": A normal application can use any value between 0x0000 and 0xBFFF but if you are writing a DLL, then you must use GlobalAddAtom to get a unique identifier for your hot key.

    [ Dieser Beitrag wurde am 25.05.2003 um 00:28 Uhr von Erhard Henkes editiert. ]



  • Ich habe es hinbekommen !
    GlobalAddAtom hab ich nicht gebraucht.

    Vielen Dank an euch !

    Chris



  • Bislang bekommt mein Programm die Eingaben
    wunderbar mit. Lediglich werden die Eingaben
    im Fenster, das aktuell den Fokus hat nicht
    mehr angezeigt. 😞

    Wie kann ich sowohl in meinem Programm,wie
    auch im aktuellen Fenster die Eingaben empfangen ?

    Ich vermute es liegt am ersten Parameter, oder ?

    RegisterHotKey(this->m_hWnd,300,NULL,'C');
    

    Nur wie änder ich das nun richtig ab ?

    Chris



  • RegisterHotKey(m_hWnd,0x1000,NULL,VK_F5); //OnInitDialog
    //dann nur noch die PreTranslateMessage Funktion überschreiben
    if (pMsg->message == WM_HOTKEY){
    switch (pMsg->wParam) {
    case 0x1000: //Identifier von deinem Hotkey
    //Aktion..
    break;
    }
    }
    


  • Hi,

    ich habs noch net hinbekommen.
    PreTranslateMessage habe ich jetzt eingebunden.
    Allerdings werden die Tasteneingaben aus z.B.
    Word immernoch von meinem Programm abgefangen
    und erscheinen somit nicht mehr in Word 😮

    Tastatureingabe in Word->Meinprog im Hintergrund->
    Buchstabe löst Funktion in meinem Programm aus
    ->in Word kommt Buchstabe nicht mehr an....

    😞 Chris



  • dann registrier halt auch keine hotkeys, die ohne zusatztasten funktionieren ... hotkey haben normalerweise die form Strg + x oder Alt + x o.ä.



  • Also ist RegisterHotKey dafür nicht gedacht ?!
    Gibts nen anderen Weg die Tasten systemweit zu
    loggen und dennoch im aktuellen Fenster anzuzeigen ?

    Ciao Chris



  • Hi!
    Geh einfach auf www.google.de und gib "Keylogger mfc" oder "Keylogger winapi" ein. Der findet da 1000 Seiten 😉

    mfg mike


Anmelden zum Antworten