Thema: Delphi hInstance - KeyboardHook

Einzelnen Beitrag anzeigen

napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#1

hInstance - KeyboardHook

  Alt 30. Jul 2008, 16:59
Moin Moin,
dachte ich beschäftige mich mit Hooks - und habe es eigentlich soweit auch verstanden, jedoch kann ich wenn ich die Tastatur hooke nur Tasten abfangen die auf meiner Form gedrückt wurden!?!?

Ich denke es liegt an hInstance im Quellcode der DLL.

DLL QuellCode:
Delphi-Quellcode:
library KeyboardHook;

uses
  Windows, SysUtils,
  Messages;

{$R *.res}

var
  HookHandle: Cardinal = 0;
  SendHwnd: Cardinal;

const
  MM_KeyDown = 2072;

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
        SendMessage( SendHwnd, MM_KeyDown, wParam, lParam );
      end;
  end;
end;


function InstallHook( Hwnd, ResultHwnd: Cardinal ): Boolean; stdcall;
begin
  Result := False;
  if HookHandle = 0 then
  begin
    HookHandle := SetWindowsHookEx( WH_KEYBOARD, @KeyboardHookProc, hInstance, 0 );
    SendHwnd := ResultHwnd;
    Result := True;
  end;
end;

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

exports
  InstallHook,
  UninstallHook;

begin
end.
HauptProgramm QuellCode:
Delphi-Quellcode:
unit Main;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure btnUninstallClick(Sender: TObject);
    procedure btnInstallClick(Sender: TObject);
  protected
    { Protected-Deklarationen }
    procedure WndProc(var Msg: TMessage); override;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

const
  MM_KeyDown = 2072;

function InstallHook( Hwnd, ResultHwnd: THandle ): Boolean; stdcall;
  external 'KeyboardHook.dll';
function UninstallHook: Boolean; stdcall;
  external 'KeyboardHook.dll';

implementation

{$R *.dfm}

// Nachricht verarbeiten
procedure TForm1.WndProc(var Msg: TMessage);
begin
  inherited;
  if (Msg.Msg = MM_KeyDown) then
    Form1.Caption := IntToStr( Msg.WParam );
end;

// Hook installieren
procedure TForm1.btnInstallClick(Sender: TObject);
begin
  InstallHook( Handle, Handle );
end;

// Hook deinstallieren
procedure TForm1.btnUninstallClick(Sender: TObject);
begin
  UninstallHook;
end;

end.
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat