AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage bzgl. HookHandle und DLL

Ein Thema von Chris P · begonnen am 28. Feb 2007 · letzter Beitrag vom 28. Feb 2007
Antwort Antwort
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#1

Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 10:56
Hi Leute,

ich habe folgende Frage zu einem HookHandle und einer DLL:

Man hat ein Hauptprogramm und eine DLL in der ein Keyboardhook implementiert ist.

Nun wird ja aus dem Hauptprogramm heraus der Hook installiert mittels SetWindowsHook(...)
Der Rückgabewert ist das HookHandle. Also wird ja das Handle nur in der DLL-Kopie des
Hauptprogramms gesetzt.

Jetzt greift aber CallNextHookEx(...) in der Hook-Proc auf das Handle zu.
Wenn dies nun von einer anderen DLL-Kopie erfolgt ist das Handle ja immer 0, da es eine globale
Variable ist.

Wie funktioniert es dann, dass der nächste Hook korrekt ausgeführt wird?

Hier nochmal der Quelltext aus der DLL:
Delphi-Quellcode:
var
  hHook: LongWord = 0; // <--- globales HookHandle

function HookProc(Code: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall;
begin
  Result := CallNextHookEx(hHook, Code, wParam, lParam);

  [...]
end;

function SetHook(): Boolean; stdcall;
begin
  if ( hHook = 0 ) then
  begin
    // HookHandle wird nur von Hauptprogramm gesetzt
    hHook := SetWindowsHookEx(WH_KEYBOARD, @HookProc, hInstance, 0);
  end;
  Result := hHook <> 0;
end;
Danke schonmal im Voraus...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 13:22
Beim Microsoft-Compiler kann man recht leicht die globale Variable in ein shared segment bugsieren das dann global in allen DLL-Kopien ist.
Dazu gibt es ein Tool von Petr Vones http://cc.codegear.com/Item/15387 das die DLL nachtraeglich patcht.
Alternativ kann man die Variable in einem Memory Mapped File unterbringen (Stichwort MapViewOfFile).
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 13:27
Memory Mapped Files sind mir bekannt.

Mich wundert es nur warum der nächste Hook in der Hookchain fehlerfrei aufgerufen wird,
obwohl keine MMFs oder sharedmem benutzt wird.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 13:46
Ah, ich hatte heute schon zu viele Deppenfragen. Da habe ich nicht bis zur interessanten Frage gelesen.
Soweit ich das verstehe ist das nicht zum Weiterreichen an die naechste DLL-Instanz sondern zum Weiterreichen an den naechsten fremden Hook.
Es kann gut sein das dein Hook der einzige ist, dann faellt es nicht auf das es nicht funktioniert.
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 13:56
Doch doch es funktioniert ja, z.B. wird ein Tastenanschlag zuerst an mein Programm geschickt und dann korrekt an das Zielfenster, wie z.B. Word oder an den Editor.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 14:04
Wird der Message wirklich ueber den Hook versandt. Da liegt wahrscheinlich der Irrtum. Es wird vermutlich die Message erst ueber die Hooks geschickt und geht dann normal mit PostMessage ans Fenster.
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 14:17
Die DLL verarbeitet die Nachrichten selbst und schickt nichts via Postmessage an mein Hauptprogramm.
Das Hauptpogramm installiert nur den Hook.

Seltsam ist, wenn ich CallNextHookEx nicht aufrufe, wird auch nichts an Word oder an andere weitergeleitet.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 14:31
Ich meinte nicht dein Programm, sondern wie die Messageverarbeitung in Windows wohl funktioniert. Irgendwann wird dort ja die Message mit PostMessage in die Messagequeue von z. B. Word gestellt.
Es kann sein das XP die Hookchain auch ohne Hook-Handle hinkriegt. Spar doch mal die Variable ein und nimm immer 0 als HHook-Wert. Das sollte aber nicht in einer Auslieferungsversion des Programmes bleiben. Es kann ja sein das Win 2000 oder 98 es nicht hinkriegen.
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Frage bzgl. HookHandle und DLL

  Alt 28. Feb 2007, 14:44
Ich habe jetzt mal im PSDK nachgelesen.

Also CallNextHookEx(...) bewirkt ja, das die Nachrichten an alle installierten Hooks anderer
Programme weiterschickt wird. In meinem Fall ist das Hookhandle = 0, außer in der DLL der Anwendung,
und wenn das Hookhandle gleich 0 ist, wird die Nachricht gleich an das Zielfenster geschickt.


Danke Robert für deine Hilfe ... ich denke jetzt habe ich es verstanden!
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:43 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