Problem mit Global Keyboard Hook
-
ein hook muss doch in einer dll sein um global zu sein und davon sehe ich in deinem code nichts.
-
das ganze ist völlig unlogisch. ich hab in der keyboardproc der dll immer eine messagebox öffnen lassen wenn ne taste gedrückt wurde. das ist dann auch passiert, aber nicht bei allen programmen. bei firefox, word und anderen passiert einfach gar nichts. bei meiner exe, notepad, windows suchfeld oder sonstwas wird die messagebox richtig geöffnet. meine exe gibt die ganzen tasten aus die eingegeben wurden, und obwohl ich bei der proc in der dll immer nur ein 'a' sende, empfängt die exe und alle anderen programme den buchstaben der gedrückt wurde.
-
script kids
-
Nikolai schrieb:
ein hook muss doch in einer dll sein um global zu sein und davon sehe ich in deinem code nichts.
Ein Low-Level Keyboard Hook nicht!
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx
-
so wie ich das mitbekommen hab muss das immer in einer dll sein damit man die nachricht verarbeiten oder blockieren kann bevor es ein anderes fenster erreicht. lowlevel keyboard hook hab ich auch probiert, ging nicht.
übrigens: das CALLBACK musste ich entfernen weil ich keine lösung gefunde es bei der typedef der funktion einzufügen. ist das vieleicht wichtig? wie kann ich es da beim typedef einfügen?
kleiner fortschritt: wenn der return wert der hookproc funktion größer als 0 ist, wird der gesamte keyboard input blockiert. scheint fast so als wär alles andere in der funktion egal, egal was man reinschreibt es passiert gar nichts. wenn der return wert 0 ist wird die nachricht weitergeleitet, wenn nicht dann nicht, auch nicht wenn ich CallNextHookEx aufrufe.
-
Lass es einfach sein mit den Hooks oder lern die Grundlagen.
Nimm einfach GetAsyncKeyState für deinen Keylogger.
while(1) { for(i=0;i<256;i++) { if(GetAsyncKeyState(i)==-32767) { cout<<"key: " << i << "\n"; } } }
Mit GetKeyboardLayout oder so geht das auch das du direkt die richtigen Buchstaben/Tasteneingaben siehst.
Nikolai schrieb:
übrigens: das CALLBACK musste ich entfernen weil ich keine lösung gefunde es bei der typedef der funktion einzufügen. ist das vieleicht wichtig? wie kann ich es da beim typedef einfügen?
Ja, der CALLBACK Kram ist wichtig.
Hast du überhaupt den Artikel aus der MSDN bezüglich der Hooks gelesen?!
Ich glaube nicht ! Du fauler Hund !Nikolai schrieb:
so wie ich das mitbekommen hab muss das immer in einer dll sein damit man die nachricht verarbeiten oder blockieren kann bevor es ein anderes fenster erreicht.
Nicht bei einem Lowlevel Hook !
Nikolai schrieb:
lowlevel keyboard hook hab ich auch probiert, ging nicht.
Das ist eine sehr gute Fehlerbeschreibung hast du etwa das CALLBACK gedöns rausgelassen?!
LESEN ---> http://msdn.microsoft.com/en-us/library/windows/desktop/ms632589(v=vs.85).aspx
-
ich hab alle artikel in msdn dazu gelesen. ich habs auch so gemacht wie beschrieben. angeblich braucht man CallNextHookEx damit andere fenster die taste ermpfangen, aber das bringt nichts. wenn die keyboardproc 0 zurückgibt und man vorher CallNextHookEx aufruft, passiert nichts und es werden alle eingaben blockiert. wenn es was anderes zurückgibt empfangen alle fenster ganz normal die eingabe, egal ob man CallNextHookEx aufruft oder nicht oder ob man irgendwas von den argumenten ändert.
außerdem soll das kein keylogger sein, sonst würd ich ja einfach in der exe den normalen keybaordhook benutzen. es sollte eher so ne art macro programm sein, aber ist egal.
getasynckeystate kenn ich schon, ich wüsste nicht wieso ich das benutzen sollte, es stimmt gar nicht überein mit den tasten die gesendet werden wenn man eine gedrückt hält zum beispiel.
wie mach ich das jetzt mit dem CALLBACK bei der typdefinition zum beispiel typedef BOOL (*SetupHookType)(HWND); ?
-
Nikolai schrieb:
ich hab alle artikel in msdn dazu gelesen.
Aber anscheind nicht vor meinem Post sonst wüsstest du das mit der DLL.
Naja, ok vielleicht gelesen aber nicht verstanden oder vergessen oder nicht gründlich gelesen.Nimm den Code von Lump der funktioniert.
-
hab den code von ihm ausprobiert, die tasten werden zwar alle erkannt aber das bringt mich nicht weiter als ich schon war. ich will wissen wie man die eingaben verändern kann bevor sie weitergeleitet werden, zum beispiel dass testweise immer ein 'a' gesendet wird wenn man irgendeine taste drückt.
da auch wieder das gleiche problem, dass die tastatureingaben immer ans zielfenster ganz normal weitergeleitet werden, auch wenn ich beim KBDLLHOOKSTRUCT
scancode und keycode ändere, oder wenn ich überhaupt nicht CallNextHookEx aufrufe. bei zweiterem frag ich mich wozu die funktion überhaupt gut ist wenn es keinen unterschied macht ob man sie aufruft oder nicht.
-
Müsste man da nicht schon mit Kernel Hooks rumhantieren?