AGB  ·  Datenschutz  ·  Impressum  







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

Tastaturhook mit Delphi XE2

Ein Thema von kuba · begonnen am 2. Feb 2012 · letzter Beitrag vom 4. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#1

Tastaturhook mit Delphi XE2

  Alt 2. Feb 2012, 19:09
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
Angehängte Dateien
Dateityp: zip hook.zip (3,9 KB, 22x aufgerufen)
Stefan Kubatzki
E=mc2

Geändert von kuba ( 2. Feb 2012 um 21:27 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Tastaturhook mit Delphi XE2

  Alt 2. Feb 2012, 23:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 01:12
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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 01:30
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".
Das ist falsch. Auch unter 32-Bit kann man als nicht Administrator diesen Schlüssel nur lesend öffnen. Die Zugriffsberechtigungen haben nicht mit 32- oder 64 Bit zu tun. Wobei unter 64-Bit mit einem 32-Bit Programm noch die Redirection von dem 32-Bit Programm dazu kommt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 02:07
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:
  Result := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
//
Der erste Parameter ist falsch. Korrekt:
Delphi-Quellcode:
  Result := CreateFileMapping($FFFFFFFFFFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
//
// EDIT:
Dann funktioniert das Programm auch mit 64-Bit kompiliert vollkommen korrekt.
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 3. Feb 2012 um 02:11 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 08:14
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 09:48
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.
Schön wäre es, probiere es bitte erst einmal aus... Es hat einen Grund warum ich das so geschrieben habe... Mit INVALID_HANDLE_VALUE geht es nicht (das ist als THandle(-1) deklariert).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 09:51
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:
  Result := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
//
Der erste Parameter ist falsch. Korrekt:
Delphi-Quellcode:
  Result := CreateFileMapping($FFFFFFFFFFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
//
// EDIT:
Dann funktioniert das Programm auch mit 64-Bit kompiliert vollkommen korrekt.
Super !! Vielen Dank, funktioniert einwandfrei

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 10:06
[...] probiere es bitte erst einmal aus... Es hat einen Grund warum ich das so geschrieben habe... Mit INVALID_HANDLE_VALUE geht es nicht (das ist als THandle(-1) deklariert).
Ich bin schlauer, als ich aussehe Denn ich habe es probiert. Folgender Code gibt mir für 32-bit und 64-bit den jeweils korrekten Wert aus:

Delphi-Quellcode:
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.
Ich kann derzeit allerdings nicht sagen, welche Einflüsse hier noch mit hineinspielen und warum das bei Dir nicht klappt.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Tastaturhook mit Delphi XE2

  Alt 3. Feb 2012, 10:08
Zitat:
program Project731;
Ich dachte immer, ich sei der Einzige, der bei Mini-Testprogrammen so schlampert
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 20:17 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