Hook --> DLLProc

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Hook --> DLLProc

Beitrag von Bauer321 »

Hallo,

da man mir die Tutorials von Assarbad empfahl, habe ich mir sein Hook tutorial mal gedownloadet und erstemal versucht die Beispiel dll von Delphi zu Lazarus zu portieren.
Das geht soweit auch allerdings kann man die dll nicht kompilieren aufgrund dessen da ein Fehler in der folgenden Zeile auftritt:

Code: Alles auswählen

[...]
uses
  Windows,
  Messages;  
[....]
begin
  DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@DLLMain)));
[...]
end.
Mir wird folgende fehlermeldung angezeigt:

Code: Alles auswählen

phookdll.lpr(221,61) Error: Identifier not found "DLLProc"
Wenn ich das richtig interpretiere gibt es in lazarus also eone Prozedur oder sowas in der art mit dem namen DllProc nicht(oder ich habe sie nicht eingebunden) welche ich für diese dll benötige
da ich leider keinerlei sinnvolle Lösung gefunden haben wie ich das ändern muss bzw wie ich Lazarus das "beibringen" kann frage ich das jetzt hier ;)
www.mcpatcher.net | www.hoeper.me

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Hook --> DLLProc

Beitrag von Bauer321 »

niemand ne idee oder einen link?

ansonst kann mir eventuell wer sagen wie ich einen hotkey so setzen kann, das er auch dann funktioniert wenn ein spiel gestartet ist.
dabei sollte zu beachten sein, das ich das nicht allzu gerne auf jedes spiel anpassen möchte.
www.mcpatcher.net | www.hoeper.me

BeniBela
Beiträge: 320
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Hook --> DLLProc

Beitrag von BeniBela »

Bauer321 hat geschrieben:niemand ne idee oder einen link?
http://community.freepascal.org:10000/b ... m_id=24090" onclick="window.open(this.href);return false;



Bauer321 hat geschrieben: ansonst kann mir eventuell wer sagen wie ich einen hotkey so setzen kann, das er auch dann funktioniert wenn ein spiel gestartet ist.
dabei sollte zu beachten sein, das ich das nicht allzu gerne auf jedes spiel anpassen möchte.
Unter Windows 98 hat es immer mit RegisterHotkey funktioniert und das ist auch einfacher.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Hook --> DLLProc

Beitrag von Bauer321 »

also bei mir unter windows vista geht es mit register hootkey nicht bei spielen aber sonst überall in windows

edit: der link hilft leider auch nciht wirklich weiter...
www.mcpatcher.net | www.hoeper.me

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Hook --> DLLProc

Beitrag von pluto »

Hast du vielleicht ein Rechte Problem? Darf sowas vielleicht nur der Admin?
Ich weiß jetzt nicht ab wann MS das rechte System angepasst hat....
MFG
Michael Springwald

BeniBela
Beiträge: 320
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Hook --> DLLProc

Beitrag von BeniBela »

edit: der link hilft leider auch nciht wirklich weiter...
Doch, der Quellcode ersetzt die c-Variable durch einen Aufruf zu DLLMain, und die Funktion sollte jetzt ein case-Statement (oder ifs) mit
bis zu vier Werten enthalten.
Und statt der DLLProc-Variable gibt es in fpc halt drei Variablen, von denen jede einem Zweig im case entspricht.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Hook --> DLLProc

Beitrag von Bauer321 »

also muss ich die dll so umändern das ich die dort vorzufindenen variablen zum registrieren/entfernen des hooks verwende oder?
www.mcpatcher.net | www.hoeper.me

BeniBela
Beiträge: 320
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Hook --> DLLProc

Beitrag von BeniBela »

Nicht wirklich.
Witzigerweise heißen die fpc Variablen zwar xxxHook, aber sie haben mit dem Windows-Hook, den du willst, nicht zu tun.

Der Windows-Hook lädt die dll in alle Prozesse und die fpc-Variablen bzw. DLLProc erlaubt es einem eine Funktion beim Laden und Entladen auszuführen.

Ich habe das Tutorial schon Jahre lang nicht mehr angeguckt, aber imho brauchst du die DLLProc überhaupt nicht.
Du musst nur beim Laden der dll mittels IPC den Hookhandle(=den von SetWindowsHookEx zurückgebenen Wert) ermitteln.
(und das auch nur, weil du sonst alle _anderen_ Hooks blockierst und eventuell abstürzen lässt.)

Antworten