(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
AW: Kleine Verständnisfrage zu globalen Hooks
18. Jan 2011, 13:36
ich hab mir eben auch mal ein Testprojekt gebaut und es funktioniert ohne Fehlermeldungen etc.:
DLL:
Delphi-Quellcode:
library msghookproj;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
Informationen als PChar- oder ShortString-Parameter übergeben. }
uses
windows,
SysUtils,
Classes;
{$R *.res}
var
FHook: Cardinal = 0;
function MyHookProc(aCode: Integer; wparam: wparam; lparam: lparam): LRESULT; stdcall;
begin
if (FHook <> 0) then
result := CallNextHookEx(FHook, aCode, wparam, lparam)
else
result := 0;
end;
procedure InstallHook(); stdcall;
begin
FHook := SetWindowsHookEx(WH_GETMESSAGE, MyHookProc, HInstance, 0);
end;
procedure UninstallHook(); stdcall;
begin
if FHook <> 0 then
UnhookWindowsHookEx(FHook);
end;
exports
MyHookProc,
InstallHook,
UninstallHook;
begin
end.
Programm:
Delphi-Quellcode:
unit unMain;
interface
uses
Windows, Forms;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
function MyHookProc(aCode: Integer; wparam: wparam; lparam: lparam): LRESULT; stdcall; external ' msghookproj.dll';
procedure InstallHook(); stdcall; external ' msghookproj.dll';
procedure UninstallHook(); stdcall; external ' msghookproj.dll';
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
InstallHook();
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
UninstallHook();
end;
end.
Funktioniert bei dir obiger Code ohne Fehler?
Jens Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
|
|
Zitat
|