Hook-Problem



  • Ich hab mir ein Hook-Programm geschrieben (mit Hilfe der des FAQ-Beitrags).
    Das funktioniert auch soweit.
    Jetzt habe ich aber drei Probleme:
    1. Wie kann ich Tastenkombinationen erfassen und auswerten?
    2. Wie kann ich mir anzeigen lassen bzw. überprüfen, welche Sondertaste gedrückt wurde (ich hab einige Extratasten an der Tastatur, die ich überwachen möchte)?
    3. Wenn durch eine bestimmte Taste oder Tastenkombination eine Nachricht verschickt wird, möchte ich diese verarbeiten und nicht, dass sie an andere Fenster weitergschickt wird.

    Weis jemand Rat? 😕

    thx



  • hmmm....
    weis keiner ne Lösung oder Lösungsansatz oder versteht ihr nicht, was ich machen möchte 😕 😞



  • klar, aber eine liste mit forderungen hinzuknallen ist nicht gerade ne feine art. versuch dich doch erstmal daran, eine bestimmte eingabe zu erkennen,
    und wenn du probleme hast, stelle konkrete fragen.

    lern suchen und lesen...google, msdn .. 😉
    dort findest du genug über hooks, um die gewünschten ziele zu erreichen.
    außer punkt 1, dafür solltest du zumindest mal was von strings gehört haben.



  • Ich krieg zwar bei den Normalen Tasten, also Buchstaben, Zahlen, Enter, Strg, Umschalt raus, dass es die Taste ist, weis aber nicht, was bei den Sondertasten (Multimediatasten) gesendet wird. Da hilft mir auch die Funktion GetKeyNameText() nicht weiter. Und ansonsten hab ich ja schon gegoogelt, aber nichts gefunden.



  • Bocky< schrieb:
    Und ansonsten hab ich ja schon gegoogelt, aber nichts gefunden.

    dann suchst du falsch.
    beispiel?
    google: http://www.google.de/search?hl=de&q=multimedia+key+hook+windows&btnG=Suche&meta=
    9. treffer: http://www.codeguru.com/cpp/w-p/system/keyboard/article.php/c5655/
    und jener herr beschreibt in seinem artikel, dass er das wissen zu dem artikel aus der MSDN hat...komisch, nich?



  • hmm...vllt such ich falsch...

    aber auch mit dem von dir geschickten link, habe ich nichts erreichen können:
    Egal welche Taste ich drücke, der if-block

    if (nCode == HSHELL_APPCOMMAND){
    ...
    }
    

    wird nie aufgerufen.

    Aber: in der FAQ-Dll wird der WParam nicht übergeben. Anhand diesem kann ich die Multimediatasten auslesen. Aber diese machen trotzdem noch das, was sie Standardmäßig auch machen (z.B. Browser oder E-Mail-Programm aufrufen, etc...), obwohl ich 1 zurückgebe.



  • Ich hab das ganze als LowLevelKeyboardHook gemacht, aber dann bekomme ich nicht heraus, welche Taste gedrückt worden wurde 😞 .
    LParam ist ein Zeiger auf ein KBDLLHOOKSTRUCT, dadrin stehen dann die Informationen zu der gedrückten Taste.

    Aber wie kann ich dadrauf zugreifen?
    
    Hook-Funktion in der dll:
    [cpp]EXPORT DWORD CALLBACK llKBHook(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	if((nCode < 0) || (nCode == HC_NOREMOVE)){
    		return CallNextHookEx(ghKBHook, nCode, wParam, lParam);
    	}
    
    	if(lParam & 0x40000000)
    		return CallNextHookEx(ghKBHook, nCode, wParam, lParam);
    
    	// Send key information to the main window
    	PostMessage(HWND_TARGET_PROG, WM_KB_HOOK, lParam, wParam);
    
    	return CallNextHookEx(ghKBHook, nCode, wParam, lParam);
    }
    

    Die Message-Funktion zum Auswerten wird korrekt aufgerufen



  • Bocky< schrieb:
    aber auch mit dem von dir geschickten link, habe ich nichts erreichen können:

    Der von Xantus gepostete Link funktioniert auch nur mit einem Shell-Hook (WH_SHELL).

    Du hast aber die ganze Zeit einen Keyboard-Hook (WH_KEYBOARD) benutzt. So wird datt nix.


Anmelden zum Antworten