Portál AbcLinuxu, 12. května 2025 08:07
XGrabKey
stisk klávesy 'T' (XK_T
), a místo ní potřebuji odeslat stisk klávesy jiné (pomocí funkce XSendEvent
). Vše víceméně funguje, do té doby, pokud simuluji stisk klávesy z "normální" části klávesnice, takže například 'A' (XK_A
) zareaguje v pořádku a znak se vypíše. Pro převod na keycode
užívám funkce XKeysymToKeycode
.
Problém nastane ve chvíli, kdy potřebuji simulovat stisk klávesy z numerické části klávesnice, a stane se následující: Pokud chci poslat jedničku na numpadu (XK_KP_1
), cílová aplikace zachytí pouze keycode ekvivalentní k XK_KP_End
. Hádám, že je to ovlivněno modifikátorem XKeyEvent.state
, ale dokumentace mi u tohoto moc nepomohla...
Netuší někdo proč se to chová takto?
(Pokud by se někdo ptal, proč mi nestačí poslat normálně jedničku, tak se jedná o nucené přemapování ovládání jedné hry Řešení dotazu:
The operation of keypad keys is controlled by the KeySym named XK_Num_Lock, by attaching that KeySym to some KeyCode and attaching that KeyCode to any one of the modifiers Mod1 through Mod5 . This modifier is called the numlock modifier. The standard KeySyms with the prefix ``XK_KP_'' in their name are called keypad KeySyms; these are KeySyms with numeric value in the hexadecimal range 0xFF80 to 0xFFBD inclusive. In addition, vendor-specific KeySyms in the hexadecimal range 0x11000000 to 0x1100FFFF are also keypad KeySyms.Stacilo pouze nastavit modifikator
XKeyEvent.state = 16
, a program se zacal chovat dle meho ocekavani, jeste se v tom pohrabu, ale uz to alespon castecne funguje jak jsem zamyslel.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.