Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
Delphi 7 Enterprise
|
hInstance - KeyboardHook
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.
|
|
Zitat
|