Przechwytywanie faktu wciśniecia klawisza (bez hook)

0

Witam.
Czy jest jakiś inny sposób na przechwycenie zdarzenia wciśniecia klawisza na klawiaturze po za aplikacją niż zakładanie globalnego hooka? Hook stwarza mase problemów przez co jest niestabilny. Jest na to jakiś lepszy sposób? Chodzi mi o przechwycenie klawiszy (lub reakcję na kliknięcie w klawiaturę) w całym systemie, nie tylko w obszarze aplikacji.

0

Znaczy nie rozumiem jak chodzi o konkretny klawisz (lub kilka) to nie ma problemu RegisterHotKey ale jak chcesz przechwytywać wszystkie wciśnięcia klawiszy to poza hookiem raczej nie ma możliwości.

const
  MY_HOOT_KEY_ID = 100100; //jakies sobie ID
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  protected
    procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMHotKey(var Message: TMessage);

begin
{
 tu można by sprawdzac jaki klawisz i odpowiednio reagowac wszysko jest w helpie
idHotKey = (int) wParam;              // identifier of hot key
fuModifiers = (UINT) LOWORD(lParam);  // key-modifier flags
uVirtKey = (UINT) HIWORD(lParam);     // virtual-key code
}
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, MY_HOOT_KEY_ID, 0 {tu można control, shift itp.}, Ord('A'));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, MY_HOOT_KEY_ID);
end;
0

Chciałbym przechwytywać wszystkie wciśnięcia klawiszy i myszki lub sam fakt o tym że te klawisze zostały wciśnięte.

0

Można w wątku ze sleepem z krótkim imtervalem, rzędu 100 ms, odczytywać GetAsyncKeyState. Sprawdziłem to w kilku programach. Zobacz jak powiązane jest to z WM_HOTKEY w kodzie trainera do Maxa Payne'a, który jest na moim blogu. Tam zaadaptowałem rozwiązanie z kodu źródłowego Cheat Engine do WinAPI.

0

Poradziłem sobie zakładaąc hooka osobno na klawiaturę i osobno na myszkę, nie używając WH_journalrecord bo to jest strasznie niestabilne. pÓÓÓÓki co działa :)

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