Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

AW: Kleine Verständnisfrage zu globalen Hooks

  Alt 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
  Mit Zitat antworten Zitat