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