AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit der DLL und dem Hook

Ein Thema von FaFu · begonnen am 8. Okt 2008 · letzter Beitrag vom 11. Okt 2008
Antwort Antwort
FaFu
(Gast)

n/a Beiträge
 
#1

Problem mit der DLL und dem Hook

  Alt 8. Okt 2008, 22:05
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]
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Problem mit der DLL und dem Hook

  Alt 9. Okt 2008, 20:57
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;
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
FaFu
(Gast)

n/a Beiträge
 
#3

Re: Problem mit der DLL und dem Hook

  Alt 10. Okt 2008, 16:15
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
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Problem mit der DLL und dem Hook

  Alt 11. Okt 2008, 00:36
Offensichtlich hast Du Dir die Tutorials nicht aufmerksam genug durchgelesen.

Im Grunde hast Du doch schon einen fast funktionierenden Quelltext. Mit
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(Self.Handle); // und hier die Prozedur aus der DLL aufrufen, ggf. Parameter übergeben nicht vergessen!
  end; // else ERROR
end;
initialisierst Du den Hook.

In der DLL musst Du dann noch hier
Delphi-Quellcode:
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;
ein wenig nacharbeiten.

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.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz