Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Kleine Verständnisfrage zu globalen Hooks (https://www.delphipraxis.net/157608-kleine-verstaendnisfrage-zu-globalen-hooks.html)

Neutral General 18. Jan 2011 12:28

AW: Kleine Verständnisfrage zu globalen Hooks
 
Ja FHook ist 0. Hab auch eben FHook extra mal initialisiert, weil ich das auch schon vermutet hatte. Aber das ändert leider nichts :(

SirThornberry 18. Jan 2011 12:36

AW: Kleine Verständnisfrage zu globalen Hooks
 
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?

Neutral General 18. Jan 2011 12:47

AW: Kleine Verständnisfrage zu globalen Hooks
 
Ja das klappt. Ich glaube es lag an ShareMem. Wenn man die Unit einbindet, dann gibts den Fehler. (Die borlndmm.dll ist wohl auch Bestandteil von ShareMem).

Danke schonmal euch beiden :)
Wenn ich doch nicht weiter kommen sollte, melde ich mich wieder :-P

Assarbad 18. Jan 2011 13:10

AW: Kleine Verständnisfrage zu globalen Hooks
 
Zitat:

Zitat von SirThornberry (Beitrag 1075489)
Bei deinem ursprünglichem Quelltext ist klar das irgend etwas abrauchen kann weil du mit FHook arbeitest obwohl es nicht initialisiert ist (ist nur in der Instanz initialisiert die für die du installHook aufrufst).

Sähkunde mal. Ich denke globale Variablen sind in Delphi immer ausgenullt?!

SirThornberry 18. Jan 2011 17:38

AW: Kleine Verständnisfrage zu globalen Hooks
 
achso, da war ich mir nicht mehr sicher :oops:

Assarbad 18. Jan 2011 18:54

AW: Kleine Verständnisfrage zu globalen Hooks
 
Zitat:

Zitat von SirThornberry (Beitrag 1075610)
achso, da war ich mir nicht mehr sicher :oops:

Ich persönlich bevorzuge trotzdem die explizite Schreibweise ;) ... ist eine Sache der Wartbarkeit (m.M.n.).


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz