在c ++中获取状态xev linux值

时间:2014-09-25 09:17:28

标签: c++ linux keyboard

我尝试实现一个虚拟键盘应用程序,我需要知道什么时候我必须伪造一个修饰键盘。

例如:

要有一个" Z",我必须假按键并按住" SHIFT"然后假按键和假键释放" z"然后假钥匙释放" SHIFT"。 对于A-Z,我很容易知道我必须按下的键,因为它总是与非大写字母相同。

但是当你想要这种特征时:

; or . or { or % or *

它总是取决于您的键盘,例如:

我实际上是在西班牙语qwerty键盘和"," ";"在同一个密钥上,所以它们具有相同的密钥代码,但要得到&#34 ;;"我需要伪造按键a" SHIFT"在得到它之前。 因为特殊字符的映射总是不同的,并且我的程序必须在不同类型的计算机上运行,​​我正在寻找一种方法来知道何时需要伪造键在输入corespondig键码之前按下修饰符。

我通过在终端上运行xev并按下" A"(按住" SHIFT"然后按" a")来找到这个:

KeyPress event, serial 33, synthetic NO, window 0x4000001,
root 0x1a0, subw 0x0, time 5359126, (246,560), root:(2233,640),
state 0x1, keycode 38 (keysym 0x41, A), same_screen YES,
XLookupString gives 1 bytes: (41) "A"
XmbLookupString gives 1 bytes: (41) "A"
XFilterEvent returns: False

"州" (第3行)值表示是否正在按下修饰符,否则该值为0x0。 我想找到一种方法来获得它在c ++中。 谢谢你们。

0 个答案:

没有答案