Hallo.
Zitat von
Apollonius:
Wenn du eine
DLL mit LoadLibrary lädst und die DllProc dieser
DLL false zurückgibt (in Delphi wird das in System.pas über ExitCode geregelt), gibt LoadLibrary nil zurück. Wie sich das bei Hook-Dlls verhält (bedenke, dass jede Applikation ihre eigene
DLL-Instanz hat!), weiß ich nicht, ich vermute aber mal, dass Windows dort pragmatisch vorgeht und die
DLL nur in diesen Prozess nicht lädt.
Mh, ein bisschen Problematisch.
Ich habe folgendermaßen getestet:
if FileExists('C:\ary.txt') then ExitCode := 2;
InstallHook() wird durch die Host-Applikation zu Beginn 1 Mal aufgerufen. Anschließend wird der Hook gesetzt.
Das Problem: Wird dieser ExitCode nach dem Installieren der Hooks auf 2 gesetzt (durch die Anwesenheit der Datei ary.txt als eine Art "Signal"), dann interessiert Windows die LoadLibrary=False nicht. Der Hook wird trotzdem ausgeführt. Die Tastaturereignisse gehen weiterhin an die Host-Applikation.
Möglicherweise müsste ich innerhalb der Hook-Funktion in der
DLL auf ExitCode != 0 prüfen. Wäre das sinnvoll?
Zitat von
Apollonius:
Bezüglich der Rechte: Ausschlaggebend sind die angegebenen Rechte bei OpenFileMapping. Du solltest dir in deinem Hauptprogramm Security Attributes erstellen, die allen Benutzern Lese-Zugriff erlaubt, und diesen dann als Parameter für CreateFileMapping angeben. Eine solche Struktur lässt sich sehr elegant mit der
JWSCL erzeugen; direkt über die
API ist es etwas schwieriger.
Das hört sich ja schon wieder so kompliziert an
Außerdem kann ich bei meinem Turbo Delphi keine 3rd Party VCLs direkt installieren. Gibt es keine andere Möglichkeit?
@Sir Rufo: Wie machst du das mit MTANWT? Verwendest du
JWSCL oder einen anderen
API-Trick?
Gruß
blackdrake