Skocz do zawartości

[Delphi] Zamiana wciśniętego klawisza na inny w globalnym hooku


olesio

Polecane posty

Mam taki kod jak poniżej, ale on nie działa. Hook przechwytuje po wywołaniu procedury HookIt; wszystkie wciskane klawisze, ale ja chcę

osiągnąć coś takiego, że jak wcisne na przykład spację (vkCode 32) to wciskany jest zamiast niej klawisz kursor w dół (vkCode 40),, a nie

mogę zrobić tego przez Keybd_Event, bo aplikacja docelowa jest emulatorem pisanym z użyciem DirectX i nie reaguje w trakcie grania na

taki kod jak Keybd_Event. Prawdodpodobnie trzeba by wykorzystać chyba jakoś stałą LLKHF_INJECTED, ale nie bardzo wiem jak to zrobić.

Prosił bym o jakiś przykładowy kod. Bo niestety ze znajomością C u mnie słabo i lektura hook.cpp ze źródel AutoHotKeya nic mi nie dała.

A i wiem, że można zablokowac dany klawisz dając Result := 1; lub Result := 32; po czym Exit, ale ja nie chce blokowac, chcę podmienić.

//...
const
 WH_KEYBOARD_LL = $000D;
 LLKHF_EXTENDED = $0001;
 LLKHF_INJECTED = $0010;
 LLKHF_ALTDOWN = $0020;
 LLKHF_UP = $0080;

type
 tagKBDLLHOOKSTRUCT = packed record
   vkCode : DWord;
   ScanCode : DWord;
   Flags : DWord;
   Time : DWord;
   dwExtraInfo : integer;
 end;
 KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
 PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;

var
 HKHook : HHook;

function LowLevelKeyboardProc(nCode : Integer; wParam : Integer; lParam : Integer) : Integer; stdcall; export;
var
 Hook : PKBDLLHOOKSTRUCT;
begin
 Hook := Pointer(lParam);
 case nCode of
   HC_ACTION :
     begin
       if Hook.vkCode = 32 then
       begin
         Hook.vkCode := 40;
         lParam := Integer(@Hook);
         Result := CallNextHookEx(HKHook, nCode, wParam, lParam);
         Exit;
       end;
     end;
 end;
 Result := CallNextHookEx(HKHook, nCode, wParam, lParam);
end;

procedure HookIt;
begin
 HKHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, hInstance, 0);
end;
//...

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...