![]() |
SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Moin,
vielleicht kann mir das ja einer erklären: Ich habe in meiner Delphi-Anwendung einen systemweiten Hook für Tastatur und Maus installiert. Klappt wunderbar und ich bekomme mit, wenn in anderen Anwendungen geklickt wird und welche Tasten in anderen Anwendungen gedrückt werden. Und das sogar zum Beispiel im 64bit-Internet Explorer. Warum lese ich dann aber an allen relevanten Stellen, man müsse seinen Code in eine DLL auslagern, damit dieser in fremde Prozesse injiziert werden könne. ähm ... :gruebel: ... warum klappt das bei mir? Ich habe nur eine kleine schnuckelige EXE und das war's. Vielleicht kann mir ja einer sagen, was ich gerade übersehe oder welche Vorteile ich hätte, wenn ich den Code in EXE und DLL splitten würde. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Und du installierst in ganz normal mit SetWindowsHookEx?
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Ja, ganz trivial:
Delphi-Quellcode:
FHook:= SetWindowsHookEx( WH_MOUSE_LL, @FRawNotifierProc, HInstance, 0 );
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Unter welchen Betriebssystemen hast du das bisher getestet?
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Windows 7 x64, Windows XP x86 - letzteres in einer VM
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Schieb doch mal die Source rüber, das würde mich auch interessieren :)
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Ich schaue mal, ob ich es heute noch schaffe, eine Demo-Anwendung zu erstellen. Den ganzen Source kann ich schlecht veröffentlichen.
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Weltherrschaftübernahmecode :mrgreen:
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
![]() WH_MOUSE_LL Global only Zitat:
Keine Ahnung, was du da machst. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Wenn MSDN aktuell ist, dann sollte diese Möglichlkeit gar nicht erst funktionieren.
Zitat:
![]() Bernhard |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Nun stellt Euch vor, wie viel überflüssige Arbeit ich gehabt hätte, wenn ich zuvor die Doku gelesen hätte. :mrgreen:
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Das ist wie mit der Hummel und dem fliegen.
Würde die sich einen Kopf um Aerodynamik machen, käme die nicht einen Millimeter in die Höhe. Aber so ... sie fliegt einfach allen aerodynamischen Regeln zum Trotz. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
also mich hat das schon immer gestört, dass man eine DLL nehmen muss. Wenn das auch ohne geht, spart man sich viel Entwicklungsaufwand, da eine EXE wesentlich einfacher zu debuggen ist als eine DLL.
Bernhard PS: Dann braucht auch keiner mehr den dazugehörigen Feature Request zu schreiben. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Es ging schon immer ohne DLL mit _LL nur gabs das nicht unter Win98 wenn ich mich net irre.
![]() von 2007 für Keyboard_LL |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Und wie ist dann das Windows SDK zu verstehen? Die entsprechende Stelle wurde ja schon zitiert.
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Also ich kann bestätigen, dass ein globaler Tastaturhook mit SetWindowsHookEx() auch ohne DLL funktioniert. Hatte vor ewigen Zeiten schonmal ein Beispiel für einen einfachen Keylogger gesehen, der diese Methode verwendete.
Das MSDN Zitat bezieht sich nicht zufällig auf API Hooks oder dergleichen? Das würde die Sache ja erklären. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Es gibt verschiedene Arten von Hooks und dementsprechend verschiedene Stellen, an denen diese installiert werden. Deshalb funktionieren manche auch außerhalb einer DLL. Das sind genau die, deren aufzurufender Code aufgrund ihrer Funktionsweise einfach gesagt nicht von überall aus dem System erreichbar sein muss.
Dazu gehören die Hooks für das Abfangen von Tastatureingaben und der Maus, da diese über den Desktop Window Manager abgehandelt werden können. Andere Hooks müssen aber in den Speicherbereich anderer Prozesse eingeblendet werden und das geht nur mit Code, der in einer DLL liegt. Deshalb gilt diese Restriktion nicht für alle Hooks. Es kann aber durchaus sein, dass sich dies in späteren Windowsversionen ändert, wenn das Handling geändert wird. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
![]() ![]() Welche Hooks gehen so denn nicht? Ich dachte bisher immer der Trick liegt an der ASM-Prozedur:
Delphi-Quellcode:
function StdHookProc(Code, WParam: WPARAM; LParam: LPARAM): LResult; stdcall; assembler;
asm XOR EAX,EAX PUSH EAX PUSH LParam PUSH WParam PUSH Code MOV EDX,ESP MOV EAX,[ECX].Longint[4] CALL [ECX].Pointer ADD ESP,12 POP EAX end; |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Zitat:
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Das heißt, die Dokumentation ist an diesem Punkt unvollständig bzw. ungenau?
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Zitat:
Zitat:
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Ich glaube es stand auch schonmal richtig im MSDN. Vielleicht kann ja mal einer der Delphi7 hat in der entsprechenden Hilfe nachschauen. Ich glaube da wurden eben die LL-Hooks gesondert aufgeführt.
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Interessant in diesem Zusammenhang:
![]() Wichtig: Zitat:
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Moin Jens,
Zitat:
|
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Warum die "normalen" Hooks in einer DLL liegen müssen
(oder in der EXE, worin geziehlt lokal gehookt wird) ist doch bestimmt klar? Diese Hooks werden direkt angesprungen und es werden womöglich größere Strukturen als Parameter übergeben, weswegen sie im selben Adressraum liegen müssen, wie die gehookte Prozedur. Diese Low-Level-Hooks laufen vermutlich auf Windows-Ebene, also noch außerhalb der Anwendungen ab, von wo aus dann die eigene Hookprozedur über das System im eigenen Prozess aufgerufen wird. |
AW: SetWindowsHookEx ... geht systemweit auch ohne DLL ... ?
Zitat:
Das läuft über den Desktop Window Manager. // EDIT: Und steht in dem Link von toms ja auch nochmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 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