Ik heb een class die een keyboardhook maakt met SetWindowsHookEx
de callback ziet er als volgt uit:
GenerateEvent zoekt uit wat voor een event naar de user te genereren (keyup, keydown, etc) en geeft een boolean terug of de toetsaanslag wel of niet geblokkeerd moet worden voor de rest van de chain.
het werkt redelijk maar ik heb hier 2 problemen mee:
1: als er een nieuwe toetsaanslag is terwijl de oude nog niet afgewikkeld is (als de user van de class dus lang bezig is met het event af te handelen) krijg ik die nieuwe callback niet. Sterker nog: dan krijg ik daarna helemaal geen callbacks meer.
2: als je naar een andere app switched met alt-tab (dus niet met muis) heb ik hetzelfde probleem, d'r komen dan geen callbacks meer. Zal wel errug met het vorige probleem te maken hebben.
probleem 1 heb ik redelijkerwijs opgelost maar dat lijkt meer op symptoom bestrijding dan dat het een echte oplossing is....
code:
1
| fKeyboardHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, hInstance, 0); |
de callback ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| function KeyboardProc(nCode: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall; begin if nCode = HC_ACTION then begin if GenerateEvent(wParam, lParam) then result := 1 else result := 0; end else result := CallNextHookEx(fKeyboardHook, nCode, wParam, lParam); end; |
GenerateEvent zoekt uit wat voor een event naar de user te genereren (keyup, keydown, etc) en geeft een boolean terug of de toetsaanslag wel of niet geblokkeerd moet worden voor de rest van de chain.
het werkt redelijk maar ik heb hier 2 problemen mee:
1: als er een nieuwe toetsaanslag is terwijl de oude nog niet afgewikkeld is (als de user van de class dus lang bezig is met het event af te handelen) krijg ik die nieuwe callback niet. Sterker nog: dan krijg ik daarna helemaal geen callbacks meer.
2: als je naar een andere app switched met alt-tab (dus niet met muis) heb ik hetzelfde probleem, d'r komen dan geen callbacks meer. Zal wel errug met het vorige probleem te maken hebben.
probleem 1 heb ik redelijkerwijs opgelost maar dat lijkt meer op symptoom bestrijding dan dat het een echte oplossing is....
A software developer is someone who looks both left and right when crossing a one-way street.
Dé antenne-innovatie voor de korte golf