1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| UNIT Unit1;
{----------------------------------------------------------------}
{ }INTERFACE{ }
{----------------------------------------------------------------}
USES Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,
Forms,Dialogs,ExtCtrls,StdCtrls;
CONST HookDll='HOOKDLL.DLL';
TYPE
TProcCallBack=PROCEDURE(Msg:Integer);STDCALL;
TForm1=CLASS(TForm)
PROCEDURE FormDestroy(Sender: TObject);
PROCEDURE FormCreate(Sender: TObject);
PROCEDURE OnWmCopyData(var msg:TMessage);MESSAGE WM_COPYDATA;
END;
TKeyState=RECORD
ExtendedKey,Alt,PrevPressed,Pressed:Boolean;
END;
VAR Form1:TForm1;
MouseHookStruct:TMouseHookStruct;
PROCEDURE FinalisationHook;STDCALL;EXTERNAL HookDll;
FUNCTION InitialisationHook(HandelDestData:HWnd):Boolean;STDCALL;EXTERNAL HookDll;
FUNCTION GetEtatTouche(from:Longint):TKeyState;
{----------------------------------------------------------------}
{ }IMPLEMENTATION{ }
{----------------------------------------------------------------}
{$R *.DFM}
TYPE
TPDataEnvoyes=^TDataEnvoyes;
TDataEnvoyes=PACKED RECORD
Key:WPARAM;
State:LPARAM
END;
VAR passkey,Keyreaded:Integer;
Keypressed:Boolean;
Permission:Boolean;
{----------------------------------------------------------------}
FUNCTION bit(bitnum:Integer;int:Longint):Boolean;
BEGIN Result:=(int AND(Cardinal(1)SHL(bitnum-1)))>0;END;
{----------------------------------------------------------------}
FUNCTION GetEtatTouche(from:Longint):TKeyState;
BEGIN
Result.Alt:=bit(30,from);
Result.ExtendedKey:=bit(25,from);
Result.PrevPressed:=bit(31,from);
Result.Pressed:=NOT bit(32,from);
END;
{----------------------------------------------------------------}
{ KEYBOARD INTERRUPT }
{----------------------------------------------------------------}
PROCEDURE TForm1.OnWmCopyData(var msg:TMessage);
TYPE TPCopyDataStruct=^TCopyDataStruct;
TPDataEnvoyes=^TDataEnvoyes;
VAR DataEnvoyes:TDataEnvoyes;
PDataEnvoyes:TPDataEnvoyes;
PCopyDataStruct:TPCopyDataStruct;
KeyState:TKeyState;
BEGIN
PCopyDataStruct:=TPCopyDataStruct(msg.LParam);
PDataEnvoyes:=PCopyDataStruct^.lpData;
DataEnvoyes:=PDataEnvoyes^;
KeyState:=GetEtatTouche(DataEnvoyes.State);
PassKey:=DataEnvoyes.State;
Keypressed:=KeyState.Pressed;
KeyReaded:=DataEnvoyes.Key;
IF(Keypressed)AND(KeyReaded=ord('B'))THEN Permission:=NOT Permission;
msg.Result:=1;
IF(Permission)THEN msg.Result:=0;
END;
{----------------------------------------------------------------}
{ FORM DESTROY }
{----------------------------------------------------------------}
PROCEDURE TForm1.FormDestroy(Sender: TObject);
BEGIN FinalisationHook;END;
{----------------------------------------------------------------}
{ FORM CREATE }
{----------------------------------------------------------------}
PROCEDURE TForm1.FormCreate(Sender: TObject);
BEGIN FinalisationHook;
IF NOT(InitialisationHook(Handle))THEN BEGIN
ShowMessage('Erreur à la création du Hook!');HALT;END;
Permission:=True;
END;
{----------------------------------------------------------------}
END. |
Partager