![]() |
Hooks - unterschiedliche Anzahl der abgefangenen Nachrichten
Hallo,
ich habe mich gerade eben erst registriert und wollte erst einmal Danke sagen. Ich finde diese Seite ehct Klasse und sie hat mir schon oft geholfen. Nun bin ich aber auf ein Problem gestoßen auf das cih wedre hie rncoh bei Google eine ANtwort gefunden habe. Und zwar habe ich mich in der letzten Zeit mit Hooks beschäftigt. Das meißte konnte ich mir über verschiedene Tutoritals selbst erklären, doch nun bin ich auf ein Problem gestoßen, bei dem ich nicht weiter komme.
Delphi-Quellcode:
Und zwar habe ich versucht die gedrückten Tasten testweise in eine Datei zu schreiben und dabei ist mir aufgefallen, dass wenn ich in Word bin dre entsprechende Buchstabe 6 mal erscheint, in Firefox 2 mal und wenn ich in Delphi tippe 1 mal. Ich habe wirklcih keine Ahnung, wie ich mir dieses Phänomen erklären kann. Ich hoffe ihr könnt mir helfen.
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin If(nCode >= 0) then begin if(lparam and $80000000) = 0 then begin AssignFile(log, GetEnvironmentVariable('SYSTEMROOT') + '\test.txt'); APPEND(log); Write(log,Keycode(wParam)); CloseFile(log); end; end; Result := CallNextHookEx(Tastaturhook, nCode, wParam, lParam); end; Wenn ich shconeinmal dabei bin, es wäre net wnen mir jemand erklären könnte wraum ich ncode überprüfen muss. Ich habe zwar gelsesen, dass dies ntig ist damit WIndows die Kontrolle über die Hookchain behalten kann, jedoch habe ich nciht verstandne warum. Was passiert wenn ich ncode nciht überprüfe? Ich würde einfahc gerne alles verstehen, was ich programmiere. Vielen Dank für eure Hilfe. Mit freundlichen Grüßen No_King |
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Auch Code und lParam enthalten nützliche Daten, die du mitprotokollieren solltest. Es kann zum Beispiel passieren, das eine Anwendung PeekMessage mit dem Flag PM_NOREMOVE verwendet und so eine Nachricht mehrfach durch die Funktion geschleust wird. Dies siehst du dann an Code.
|
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Genau das war ein weiteres Problem von mir. Wie kann ich den Wert lparam auswerten? WParam war ja vom Typ integer, aber was ist mit lParam?
|
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
LParam ist auch ein Integer. :roll:
Zitat:
|
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
ups.. Tut mir leid. Gibt es irgendwie eine Auflistung der Bedeutung dre einzelnen Integer-Werte. Bei WParam konnte ich ja einfach die virtuellen Tastencodes nutzen. Ich habe leider bis jetzt noch nichts gefunden.
|
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Die
![]() |
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Ah vielen Dank. Die Dokumentation hab ich schon gesucht gehabt, war nur zu blöd sie zu finden. Habe aber irgendwo mal gelesen, dass ich zur AUswertung die vershciedenen Bits auslesen muss. Das folgende wird ja wohl kaum gehen:
Delphi-Quellcode:
Im weiteren habe ich dann soetwas gefunden, nur kann ich dies mit meinen herkömmlichen Kenntnissen von if-Anweisungen und AND nicht verstehen:if(lparam = 24) then begin end;
Delphi-Quellcode:
if(lparam and $80000000) = 0 then begin Vielen Dank für deine sehr schnelle Hilfe. :thumb: |
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Dort ist AND auch nicht logisch (naja eigentlich schon) sonder binär gemeint. Das bedeutet bei zwei Werten, die mit AND verknüpft sind, dass nachher nur die Bits 1 sind, die bei beiden 1 waren.
BSP:
Code:
Das benutzt man meisten um auf das Vorhandensein einzellner Bits in einem Wert zu prüfen. -------------- 1110110001 AND 1101001111 -------------- = 1100000001 -------------- Wenn z.B. Wert AND 2 > 0 dann ist das zweite Bit gesetzt. Wenn z.B. Wert AND 4 > 0 dann ist das dritte Bit gesetzt. Wenn z.B. Wert AND 8 > 0 dann ist das vierte Bit gesetzt. usw... [edit] Diverse Dinge, die ich mal wieder nicht nachgeprüft habe, bevor ich gepostet habe. PS: Das Dollarzeichen gibt an das das eine Hexzahl ist, auch sehr beliebt für Binärzahlen, da jede Ziffer 4 Bit entspricht.[/edit] [edit] Für ein gutes Tutorial zu dem Thema ![]() |
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Danke das du dich so ausführlich mit meinem Problem beschäftigt hast.
Nochmal ein kurzes Beispiel um zu sehen, ob iches verstanden hab:
Delphi-Quellcode:
Damit frage ich als ab ob es sich um einen Extended-Key handelt, stimmt das?if(lparam AND 24 > 0) then begin end; @Apollonius: Auch an dich noch einmal Danke. Du hattest recht mit der PeekMessage mit dem Flag PM_NOREMOVE. ICh habe den Code nun dahingehend verändert, dass ich überprüfe ob ncode <> 3 ist.
Delphi-Quellcode:
Jetzt funktioniert es ohne Probleme und ich weiß endlich wie ich lParam auslesen kann.If(nCode >= 0) AND (nCode <> 3) then begin end; |
Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric
Leider noch nicht ganz. Mit 24 ist nicht die Zahl gemeint sonder das 24 Bit deines 32 Bit-Integers. So wie 2 für binär 10 steht. Musst du hier auch das Equivalent zum 24 Bit in Hex oder Dezimal angeben. Also musst du auf diese Zahl 1000 0000 0000 0000 0000 0000 in Hex also auf $800000 prüfen sprich.
Delphi-Quellcode:
[edit] Ich verweißte hier nochmal gerne auf das Tutorial, da wird das sehr anschaulich erklärt. [/edit]
if ((lparam AND $800000) > 0) then
begin ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz