【问题标题】:X11 Unicode KeyEvent IssuesX11 Unicode KeyEvent 问题
【发布时间】:2011-12-30 03:09:51
【问题描述】:

我正在使用需要 unicode 的各种虚拟键盘的程序。使用我从http://goo.gl/pv9ht 收到的代码,它在转换为键码时适用于普通 (ASCII) 键符,但 XKeysymToKeycode() 在 XK_agrave (include/X11/keysymdefs.h)等键符上返回 0。

我也不太确定如何对大写字母做同样的事情。当我对 XK_A(大写的“A”)尝试相同的操作时,它返回与“a”相同的键码。这确实有意义,因为根据输出“xmodmap -pke”,它们是相同的键码(以及一堆其他字符)。但是如何让它发送(XSendKeyEvent)键码的大写形式?

我们将不胜感激。

【问题讨论】:

    标签: c++ unicode x11


    【解决方案1】:

    您使用修饰键发送(在这种情况下为 shift)

    所以你设置 XKeyEvent->state |= ShiftMask

    状态成员设置为指示事件之前指针按钮和修饰键的逻辑状态,这是一个或多个按钮或修饰键掩码的按位或运算:Button1Mask、Button2Mask、Button3Mask、 Button4Mask、Button5Mask、ShiftMask、LockMask、ControlMask、Mod1Mask、Mod2Mask、Mod3Mask、Mod4Mask 和 Mod5Mask。

    来源:http://linux.die.net/man/3/xkeyevent

    【讨论】:

    • 谢谢。不过,关于第一部分有什么想法吗?
    • 据我所知,没有办法使用 X api 发送 Unicode 按键。
    • 问题已解决。我决定简单地发送 Ctrl+Shift+u+(unicode numbers)+release mods 的键码。至少它在 Ubuntu 中是这样工作的。
    • 从头开始,我最终使用 XChangeKeyboardMapping 并将未使用的键码(有点高)设置为我想要的 unicode 键符。然后我只是将 that 键码发送到指定的窗口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    相关资源
    最近更新 更多