olesio Napisano Sierpień 1, 2010 Zgłoś Share Napisano Sierpień 1, 2010 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.