![]() |
Problem mit der DLL und dem Hook
Hallo,
ich hab mir paar Tutorials durchgelesen und hab für die DLL (keyboardhook.dll) folgenden Quelltext:
Delphi-Quellcode:
library KeyboardHook;
uses Windows, Messages; var HookHandle: Cardinal = 0; WindowHandle: Cardinal = 0; function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; FALSE: begin end; end; end; function InstallHook(Hwnd: Cardinal): Boolean; stdcall; begin Result := False; if HookHandle = 0 then begin HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); WindowHandle := Hwnd; Result := TRUE; end; end; function UninstallHook: Boolean; stdcall; begin Result := UnhookWindowsHookEx(HookHandle); HookHandle := 0; end; exports InstallHook, UninstallHook; end. Und für mein Projekt wollte ich erstmal nur testen ob es auf einen Tastendruck reagiert. Hier der Quelltext:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TInstallHook = function(Hwnd: THandle): Boolean; stdcall; TUninstallHook = function: Boolean; stdcall; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var InstallHook: TInstallHook; UninstallHook: TUninstallHook; lib: Cardinal; Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin lib := LoadLibrary('keyboardhook.dll'); if lib <> INVALID_HANDLE_VALUE then begin InstallHook := GetProcAddress(lib, 'InstallHook'); end; // else ERROR end; procedure HookProc(var Result: WParam); begin if Result = $10000 then RenameFile('C:\MyWorks','C:\MyWorker'); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnInstallHook := GetProcAddress(lib, 'UninstallHook'); end; end. $10000 ist ja eigentlich Die Pfeiltaste nach unten und RenameFile war halt nur als Test gedacht. Was hab ich falsch gemacht? Ich kann alles starten, aber das Prog. tut halt nix :( Kann mir jemand helfen, bitte so dass ich es versteh, bin noch ziehmlicher Anfänger auf dem Gebiet. [edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit] |
Re: Problem mit der DLL und dem Hook
Hallo!
Du holst Dir zwar die Adresse der Prozedur aus der DLL, diese Prozedur rufst Du aber nie auf.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin lib := LoadLibrary('keyboardhook.dll'); if lib <> INVALID_HANDLE_VALUE then begin InstallHook := GetProcAddress(lib, 'InstallHook'); if Assigned(InstallHook) then // prüfen, ob die entsprechende Prozedur überhaupt in der DLL gefunden wurde InstallHook(); // und hier die Prozedur aufrufen, ggf. Parameter übergeben nicht vergessen! end; // else ERROR end; |
Re: Problem mit der DLL und dem Hook
Hi,
welche Prozedur soll ich denn aufrufen, die die ich in der DLL hab, also KeaboardHookProc oder die in meinem Prog: HookProc ???? Zur Zeit steht da halt: Nicht genügend wirkliche Parameter wenn ich die klammern wegnehm. Un wo schreib ich eigentlich die Prozedur rein mit dem RenameFile ???? In welche Datei, in welche Prozedur? mfG FaFu |
Re: Problem mit der DLL und dem Hook
Offensichtlich hast Du Dir die Tutorials nicht aufmerksam genug durchgelesen.
Im Grunde hast Du doch schon einen fast funktionierenden Quelltext. Mit
Delphi-Quellcode:
initialisierst Du den Hook.
procedure TForm1.FormCreate(Sender: TObject);
begin lib := LoadLibrary('keyboardhook.dll'); if lib <> INVALID_HANDLE_VALUE then begin InstallHook := GetProcAddress(lib, 'InstallHook'); if Assigned(InstallHook) then // prüfen, ob die entsprechende Prozedur überhaupt in der DLL gefunden wurde InstallHook(Self.Handle); // und hier die Prozedur aus der DLL aufrufen, ggf. Parameter übergeben nicht vergessen! end; // else ERROR end; In der DLL musst Du dann noch hier
Delphi-Quellcode:
ein wenig nacharbeiten.
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; FALSE: begin // hier die Tastendrücke auswerten, verarbeiten, sonst was damit machen // ggf. eine Message an Dein Hauptprogramm senden, um die Tastendrücke dort zu verarbeiten end; end; end; Aber am Besten liest Du Dir die Tutorials noch einmal aufmerksam durch und versuchst alles zu verstehen. Mit Deinem Halbwissen wirst Du nicht weit kommen. Wenn Du Fragen hast, wird Dir hier garantiert weitergeholfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr. |
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