AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Warum funktioniert mein Keyboard-Hook nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum funktioniert mein Keyboard-Hook nicht?

Ein Thema von F.W. · begonnen am 5. Mär 2008 · letzter Beitrag vom 5. Mär 2008
 
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Warum funktioniert mein Keyboard-Hook nicht?

  Alt 5. Mär 2008, 00:40
Ich wollte schon vor langer Zeit mich mal mit Hooks beschäftigen, welche bei mir aber nie funktioniert haben. Jetzt habe ich mal wieder damit angefangen und ich bin scheinbar immernoch zu dumm dazu

Der Hook funktioniert, aber leider nur, solange meine Anwendung aktiv ist, sprich mein globaler Hook zeigt sich ziemlich lokal

Hier der Quellcode des Programms:
Delphi-Quellcode:
unit HookForm_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type
  THookForm = class(TForm)
    Label1: TLabel;
    AltLbl: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure OnUserMsg(var Msg: TMessage); message WM_USER+10;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  HookForm: THookForm;

  InstallHook: function(AHWND: HWND): Boolean; stdcall;
  UninstallHook: function: Boolean; stdcall;
  lib: Cardinal;

implementation

{$R *.dfm}

function ZweiHoch(X: Integer): Integer;
begin
 Result := Round(Ldexp(1, X));
end;

procedure THookForm.OnUserMsg(var Msg: TMessage);
begin
// Label1.Caption := IntToStr(Msg.LParam);

    if (Msg.lParam and Zweihoch(24)) <> ZweiHoch(24) then
       HookForm.Label1.Caption := IntToStr(Msg.wParam)+' - '+Chr(Msg.wParam);
    HookForm.AltLbl.Visible := (msg.lParam and ZweiHoch(29)) = ZweiHoch(29);
end;

procedure THookForm.FormCreate(Sender: TObject);
begin
 lib := LoadLibrary('HookDll.dll');

 if lib <> INVALID_HANDLE_VALUE then begin
    @InstallHook := GetProcAddress(lib, 'InstallHook');
    @UnInstallHook := GetProcAddress(lib, 'UnInstallHook');

    InstallHook(HookForm.Handle);
  end;
end;

procedure THookForm.FormDestroy(Sender: TObject);
begin
 UnInstallHook;
end;

end.
Und noch der, der HookDll.dll:
Delphi-Quellcode:
library HookDll;

uses
  Windows,
  Messages;

{$R *.res}

var
  HookHandle: Cardinal = 0;
  ParentHWND: HWND = 0;

function KeyBoardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
 Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);

 if nCode >= 0 then begin

    if ParentHWND <> 0 then
       SendMessage(ParentHWND, WM_USER+10, wParam, lParam);

 end;
end;

function InstallHook(Parent: HWND): Boolean; stdcall;
begin
 Result := False;

 if HookHandle = 0 then begin
    HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyBoardHookProc, HInstance, 0);
    ParentHWND := Parent;
    Result := True;
 end;
end;

function UnInstallHook: Boolean; stdcall;
begin
 Result := UnhookWindowsHookEx(HookHandle);
 HookHandle := 0;
end;

exports
 InstallHook,
 UnInstallHook;

begin
end.
Woran liegts? Habs doch eigentlich genau so gemacht wie auf dsdt.info oder in LuckieSpy.
  Mit Zitat antworten Zitat
 


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 07:17 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 by Thomas Breitkreuz