[Delphi XE2] Hook na klawiature

lukasz108min

Użytkownik
Dołączył
Grudzień 24, 2012
Posty
9
Witam, napisałem według poradnika z forum hooka na klawiature :

Kod:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, unit1;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
MainHook : HHOOK;
 function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

implementation

{$R *.dfm}

function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

var

Buffer: TEventMsg;

begin

result := 0;

Buffer := PEventMsg(lParam)^;

if Buffer.message = wm_KeyDown then

Form1.Memo1.Text := Form1.Memo1.Text + chr(Buffer.paraml); //Tutaj Wybieramy Gdzie mają sie zapisywać wciskane klawisze, domyslnie jest to Form1.Memo1 jezeli masz inną nazwe formy domyslnej lub inną nazwę memo musisz to zmienić

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
[COLOR="#FF0000"]MainHook := SetWindowsHookEx(wh_JournalRecord, KeyHook, HInstance, 0);[/COLOR]
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(MainHook);
end;

end.
Błąd wywala na czerwonej linijce
treść błędu : [DCC Error] Unit2.pas(48): E2010 Incompatible types: 'NativeInt' and 'Integer'
 

D.F.

Były Moderator
Dołączył
Listopad 4, 2009
Posty
493
Nie mam Delphi XE2, ale na ślepo strzelam, że trzeba zmienić funkcje na:
Kod:
function KeyHook(Code: [color="red"]NativeInt[/color]; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;
 

HeadShotDeluxe

Użytkownik
Dołączył
Grudzień 17, 2012
Posty
86
Może być jakaś niezgodność między platformami 32 i 64bit.

EDIT
Wrzuć link do kodu, może coś przeoczyłeś.
 
Ostatnia edycja:

lukasz108min

Użytkownik
Dołączył
Grudzień 24, 2012
Posty
9
Ogólnie poddałem się, najwyżej skompiluje to jako .dll i użyje w delphi xe2
Po skompilowaniu w delphi 7 niby wszystko ok ale nie przechwytuje znaków :/
 

HeadShotDeluxe

Użytkownik
Dołączył
Grudzień 17, 2012
Posty
86
Po skompilowaniu w delphi 7 niby wszystko ok ale nie przechwytuje znaków :/

W zakładce "Events" musisz wybrać:
OnCreate-->FormCreate
OnDestroy-->FormDestroy

Memo ustaw ReadOnly na True, bo Ci się będą znaki dublować.
 

HeadShotDeluxe

Użytkownik
Dołączył
Grudzień 17, 2012
Posty
86
Nie działa, jaki masz system operacyjny ?

Windows XP Professional(32bit) + SP3 + aktualizacje.

PS. Ten projekt jest na Delphi 7, jakby co;)
PS2. Jak naciskasz klawisze to nic Ci nie wyskakuje w Memo? Czy po prostu Project1.exe się nie odpala?
 
Ostatnia edycja:
Do góry Bottom