Post
by phil » Tue May 12, 2015 7:42 pm
Modifier keys, right now, are "global, not application specific.
When you hold down a modifier key, that key is still presented to the focused window and is still visibly held down when getting the keyboard state. I dont know if this can even be blocked - GetKeyAsync() call that is often used queries the keyboard state at a lower level than I could block in a hook.
Its quite possible that the only place this could be done differently, is the keyboarddriver itself and as XMBC is a use rmode program it has no influence over drivers.
Even if it were possible to block the key, that would mean the key never made it in any circumstance - clearly not ideal to always block CTRL or SHIFT etc!
There are several possible solutions to this although none of them are likely because of the effort involved, even if it were possible to do (and thats not clear)....
1. throw it away if the key is held for a certain period of time (thus allowing a normal keypress through and to not modify the layer).
The problem with this is that XMBC would have to wait to decide if its genuinely a modifier or just a normal key press. It wouldn't work well for any keys like CTRL, SHIFT, ALT which you often hold down in combination with another key. Also, it would have to re-inject the key if it decides its a genuine key press.... This causes implications as some applications (many games) block injects keys (that use the SendInput API).
2. make modifier keys application profile specific, so you can choose a key that will not matter if it gets thrown away.
The problem with this is is
a) complexity in XMBC. The more complex, the more change for error and the more time I have to devote to it (and being a hobby, I just cant afford to commit a lot of time to it).
b) you are still faced with a tough choice as to which keys could be used.
Thanks,
Phil
--[ Phil ]--
--[ Administrator & XMBC Author ]--
Logitech G9, Logitech MX518, Microsoft Intellimouse, Trust 16341 BT Mouse
Windows 10 x64, Intel i5-9600k, Asus Z390-ROG, 16GB DDR4,
nVidia GeForce GTX 970, Evo 970 500Gb NVME, 2x2TB WD Black (RAID1)