Globaler KeyboardHook zur kompletten Tastaturabfrage

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Globaler KeyboardHook zur kompletten Tastaturabfrage

Beitrag von orderinchaos »

Hi Zusammen,

War schon lange nicht mehr hier auf dem Board, aber ich benötige wieder einemal eure Hilfe.

Es geht um einen globalen KeyboardHook zum kompletten Tastataturabfrage. Das Ziel ist ein Keylogger und das möchte ich auch gleich sagen, bevor irgendwelche Fragen auftauchen.

Schon seit langer Zeit möchte ich es endlich schaffen einen selbst zu programmieren oder wenigstens zu verstehen wie er funktioniert. Meine kläglichen Versuche mit getasynckeystate_ sind gescheitert oder erfüllen den Zweck nur bedingt...

Deshalb möchte ich mich nun mit einem Hook versuchen, jedoch habe ich, trotz Studieren von den KeyboardHook- Codes hier auf dem Board, keine Ahnung wie ein solcher Funktioniert.

Ich versichere hiermit, dass mein Keylogger Niemandem einen Schaden anrichten wird, sondern lediglich meinem Wissenshunger dienen!!

Ist es möglich, dass mir hier jemand ein Code- Beispiel zur Verfügung stellt, welches einen KeyBoardHook für die komplette Tastaturabfrage bereitstellt?

Versteht mich nicht falsch: Ich möchte eigentlich nicht, dass mir hier jemand die Arbeit macht, aber selbst schaff ich es einfach nicht und mit einem Code- Beispiel und eventuell entsprechenden Kommentaren, sind die Chancen gut, dass auch ich verstehe wie das abgeht.

Natürlich nur wenn das nicht gegen die Board- Regeln verstösst! Es wäre mir aber echt eine unheimlich grosse Hilfe!

Schon Mal besten Dank für alle Antworten!

- OrderInChaos -
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Globaler KeyboardHook zur kompletten Tastaturabfrage

Beitrag von Fluid Byte »

orderinchaos hat geschrieben:Ich versichere hiermit, dass mein Keylogger Niemandem einen Schaden anrichten wird, sondern lediglich meinem Wissenshunger dienen!!
:lol:
orderinchaos hat geschrieben:Ist es möglich, dass mir hier jemand ein Code- Beispiel zur Verfügung stellt, welches einen KeyBoardHook für die komplette Tastaturabfrage bereitstellt?
:lol::lol:
orderinchaos hat geschrieben:Versteht mich nicht falsch: Ich möchte eigentlich nicht, dass mir hier jemand die Arbeit macht, ...
Was dich nicht abhält es trotzdem zu versuchen. :lol::lol::lol:
orderinchaos hat geschrieben:Schon Mal besten Dank für alle Antworten!
Dafür nicht! :lol::lol::lol::lol:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Globaler KeyboardHook zur kompletten Tastaturabfrage

Beitrag von Kiffi »

orderinchaos hat geschrieben:Ist es möglich, dass mir hier jemand ein Code- Beispiel zur Verfügung stellt, welches einen KeyBoardHook für die komplette Tastaturabfrage bereitstellt?
das Problem wird wohl sein, dass dieser Code nicht viel anders sein wird
als die, die hier und im englischen Forum zahlreich vorhanden sind.

Und diese Codes verstehst Du ja lt. Deinen Ausführungen nicht.

Wo können wir Dir denn konkret helfen?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

okay, konkret: ich verstehe nicht wie ich diesen code

Code: Alles auswählen

Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
   If nCode = #HC_ACTION
      If wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
         #LLKHF_ALTDOWN = $20
         If *p\vkCode = #VK_LWIN Or *p\vkCode = #VK_RWIN
            ProcedureReturn 1
         EndIf
       EndIf
    EndIf
ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure
so umbauen kann, dass er mir das zeichen (ascii oder änlich) zurückliefert... es soll ja genau das zeichen ausgegeben werden, welches auch ein textprogramm empfangen würde, wenn die entsprechende tastenkombination (oder eben nur taste) gedrückt wurde. und da komm ich nicht drauf...

kann mir da einer weiterhelfen?

danke schon mal :mrgreen:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Tasten sind keine Buchstaben.

wenn du die Taste #VK_F drückst, kommt ein "F" oder ein "f" als Text an,
je nachdem ob gleichzeitig #VK_SHIFT gedrückt ist oder nicht.
wenn du #VK_F1 drückst, kommt gar kein Zeichen im Text an.

du müßtest dir also eine Routine basteln, die Tastatureingaben in Text übersetzt.


... und wozu soll das gut sein?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

richtig, aber ich verstehe nicht wie ich überhaupt an die tastatureingaben komme.... ich habs mal per getasynckeystate_ versucht, aber auf vielen boards werden keyboardhooks empfohlen... und da hakt es bei mir...

wozu das gut sein soll? ich denk mal, dass das gebraucht wird um einen keylogger zu realisieren, oder seh ich das falsch? :freak:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ein keylogger ist kein charlogger...


> wie ich überhaupt an die tastatureingaben komme.... ich habs mal per getasynckeystate_ versucht
öh.. ja und? das ist es doch.
> aber auf vielen boards werden keyboardhooks empfohlen
und wo soll der Unterschied sein?

wie Kiffi sagte
> das Problem wird wohl sein, dass dieser Code nicht viel anders sein wird
> als die, die hier und im englischen Forum zahlreich vorhanden sind.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

dem zu folge ist getasynckeystate_ bestandteil eines keyboardhooks?
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

nun gut, kann mir einer sagen weshalb das nicht geht :

Code: Alles auswählen

Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
  If nCode = #HC_ACTION
    If wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
      #LLKHF_ALTDOWN = $20
      If *p\vkCode = #VK_A
        Debug "A"
        ProcedureReturn 1
      ElseIf *p\vkCode = #VK_B
        Debug "B"
        ProcedureReturn 1
      ElseIf *p\vkCode = #VK_C
        Debug "C"
        ProcedureReturn 1
      ElseIf *p\vkCode = #VK_ESCAPE
        Exit = 1
        ProcedureReturn 1
      EndIf
    EndIf
  EndIf
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure
thx
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

orderinchaos hat geschrieben:nun gut, kann mir einer sagen weshalb das nicht geht :
was heißt 'nicht geht'? Gibt es einen Programmfehler oder werden die
Ausgaben nicht via Debug geschrieben?

Ich würde testweise mal ein

Code: Alles auswählen

Debug *p\vkCode
direkt unter

Code: Alles auswählen

If wParam = #WM_KEYDOWN ...
einfügen und dann schauen, was dort ausgegeben wird.

Grüße ... Kiffi
a²+b²=mc²
Antworten