![]() |
Tastaturhook mit Delphi XE2
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte einen Tastaturhook in mein Programm einbauen. Soweit funktioniert es schon, aber leider nicht wenn ich mein Programm mit Delphi XE2 als 64-Bit Version kompiliere. Im Anhang habe ich das Testprogramm gepostet. Hat jemand eine Idee, warum es mit 64-Bit nicht funktionieren will ? Im Ereignisprotokoll steht folgender Fehler: Pfad des fehlerhaften Moduls: C:\WINDOWS\SYSTEM32\PAVSHOOK64.DLL KUBA |
AW: Tastaturhook mit Delphi XE2
Eine Antwort kann ich Dir leider nicht geben, jedoch Deine schlechte Erfahrung bestätigen: Weder mit Delphi noch mit Lazarus schaffte ich es (mit den jeweiligen 64-Bit-Compilaten), unter Windows (7 mit 64 Bit) globale Hooks zu installieren.
Letzlich ist das wohl so komplex und für die Ersteller der Compiler so nebensächlich (nicht mehr sekundär, sondern schon tertiär), daß man sich damit noch nicht ernsthaft beschäftigt hat. Oder es liegt am Windows selbst. |
AW: Tastaturhook mit Delphi XE2
Das angehängte Programm funktioniert einwandfrei unter Win32 (2K,XP,Vista,7), lässt sich auch mit 64-Bit kompilieren.
C:\WINDOWS\SYSTEM32\PAVSHOOK64.DLL kommt von Panda Antivirus. Bisher konnte ich jedoch noch keinen Zusammenhang herstellen. Neulich fand ich heraus dass bei 64-Bit Systemen zwingend "OpenKeyReadOnly" verwendet werden muss wenn man HKEY_LOCAL_MACHINE Registry lesen will, bei 32 Bit geht auch einfach "OpenKey". Es kann nicht so schwierig sein, irgendwo hängt der hook sich auf weil irgendwo eine Kleinigkeit falsch läuft. Leider finde ich es mit dem Debugger nicht heraus (weil ich zu blöd bin). KUBA |
AW: Tastaturhook mit Delphi XE2
Zitat:
|
AW: Tastaturhook mit Delphi XE2
Ich habe nur kurz reingeschaut, ich probiere es noch aus. Du hast ein Problem in CreateMMF. Deshalb wird der Hook gar nicht erst versucht zu setzen
Delphi-Quellcode:
Der erste Parameter ist falsch. Korrekt:
Result := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
//
Delphi-Quellcode:
// EDIT:
Result := CreateFileMapping($FFFFFFFFFFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
// Dann funktioniert das Programm auch mit 64-Bit kompiliert vollkommen korrekt. ;-) |
AW: Tastaturhook mit Delphi XE2
Meine Herren - Finger weg von den "magic numbers", also den festen Zahlenwerten im Code. Was da erwartet wird, ist ein THandle, welches unter XE2 als NativeUInt deklariert ist und damit gemäß der Ziel-Architektur wächst oder schrumpft.
Wenn man an dieser Stelle einfach die Konstante "INVALID_HANDLE_VALUE" einsetzt, hat man einen Code, der sich für beide Architekturen übersetzen lässt, weil sich der Compiler um den korrekten Wert kümmert. |
AW: Tastaturhook mit Delphi XE2
Zitat:
|
AW: Tastaturhook mit Delphi XE2
Zitat:
KUBA |
AW: Tastaturhook mit Delphi XE2
Zitat:
Delphi-Quellcode:
Ich kann derzeit allerdings nicht sagen, welche Einflüsse hier noch mit hineinspielen und warum das bei Dir nicht klappt.
program Project731;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; begin try WriteLn( IntToHex(INVALID_HANDLE_VALUE, 16) ); ReadLn; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: Tastaturhook mit Delphi XE2
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz