AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Hooks - unterschiedliche Anzahl der abgefangenen Nachrichten
Thema durchsuchen
Ansicht
Themen-Optionen

Hooks - unterschiedliche Anzahl der abgefangenen Nachrichten

Ein Thema von No_King · begonnen am 5. Aug 2008 · letzter Beitrag vom 5. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
No_King

Registriert seit: 5. Aug 2008
6 Beiträge
 
#1

Hooks - unterschiedliche Anzahl der abgefangenen Nachrichten

  Alt 5. Aug 2008, 19:10
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:
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;
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.

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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 19:32
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
No_King

Registriert seit: 5. Aug 2008
6 Beiträge
 
#3

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 20:24
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 20:27
LParam ist auch ein Integer.
Zitat von Windows.pas:
type LPARAM = Longint;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
No_King

Registriert seit: 5. Aug 2008
6 Beiträge
 
#5

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 20:30
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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 20:31
Die Dokumentation hilft.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
No_King

Registriert seit: 5. Aug 2008
6 Beiträge
 
#7

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 20:41
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:

if(lparam = 24) then
begin



end;
Im weiteren habe ich dann soetwas gefunden, nur kann ich dies mit meinen herkömmlichen Kenntnissen von if-Anweisungen und AND nicht verstehen:

Delphi-Quellcode:

if(lparam and $80000000) = 0 then
begin

Vielen Dank für deine sehr schnelle Hilfe.
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 20:54
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:
   
--------------
    1110110001
AND 1101001111
--------------
=  1100000001
--------------
Das benutzt man meisten um auf das Vorhandensein einzellner Bits in einem Wert zu prüfen.
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 klick [/edit]
Frederic H.
  Mit Zitat antworten Zitat
No_King

Registriert seit: 5. Aug 2008
6 Beiträge
 
#9

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 21:17
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:

if(lparam AND 24 > 0) then
begin


end;
Damit frage ich als ab ob es sich um einen Extended-Key handelt, stimmt das?



@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:

If(nCode >= 0) AND (nCode <> 3) then
begin

end;
Jetzt funktioniert es ohne Probleme und ich weiß endlich wie ich lParam auslesen kann.
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Hooks - unterschiedliche Anzahl der abgefangenen Nachric

  Alt 5. Aug 2008, 21:34
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:
if ((lparam AND $800000) > 0) then
  begin
    ...
  end;
[edit] Ich verweißte hier nochmal gerne auf das Tutorial, da wird das sehr anschaulich erklärt. [/edit]
Frederic H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz