为什么XKeysymToKeycode()使我所有的键都小写?

苹果短跑

我目前在Xlib上遇到问题,每当我调用XKeysymToKeycode()并传递大写字母时KeySym,它都会返回小写字母KeyCode对于这个问题,Google似乎并没有真正回答这个问题,也没有太多关于我正在使用的功能的文档。

这是我正在使用的代码:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>

int main(void) {
    Display *display;
    char *ptr;
    char c[2] = {0, 0};
    KeySym ksym;
    KeyCode kcode;

    display = XOpenDisplay(0);
    ptr = "Test";

    while (*ptr) {
        c[0] = *ptr;
        ksym = XStringToKeysym(c);
        printf("Before XKeysymToKeycode(): %s\n", XKeysymToString(ksym));
        kcode = XKeysymToKeycode(display, ksym);
        printf("Key code after XKeysymToKeycode(): %s\n", XKeysymToString(XKeycodeToKeysym(display, kcode, 0)));
        ptr++;
    }

    XCloseDisplay(display);

    return 0;
}    

可以使用进行编译gcc -o sendkeys sendkeys_min.c -lX11 -lXtst -g -Wall -Wextra -pedantic -ansi(假设已另存为sendkeys_min.c。)

当前输出如下:

Before XKeysymToKeycode(): T
Key code after XKeysymToKeycode(): t
Before XKeysymToKeycode(): e
Key code after XKeysymToKeycode(): e
Before XKeysymToKeycode(): s
Key code after XKeysymToKeycode(): s
Before XKeysymToKeycode(): t
Key code after XKeysymToKeycode(): t

预期的输出当然是,“ Test”中的第一个T通过后仍然是大写的XKeysymToKeycode()(请注意,这不是我的实际程序,而是在此处发布的简化版本。在实际程序中,我正在发送带有键码结果的键事件,并且所发送的键仍然在此处出现问题(它们全部变为小写))

KeySyms并且KeyCodes在语义上有所不同,并且它们之间没有1-1的关系。

  • AKeyCode是一个任意的小整数,表示键盘上的键。(不是字符。一个键。)Xlib要求键代码在此范围内[8, 255],但是幸运的是,大多数键盘的键位仅多于100个。

  • AKeySym是与键关联的某些实际字符的表示。其中几乎总是有几种:小写字母和大写字母对应于大多数终端布局上的相同键。

因此,没有“大写”或“小写”之类的东西KeyCode当您获得KeyCode对应于Keysym的信息时,实际上您正在丢失信息。

在Xlib中,一个给定的键至少具有四个对应的键KeySyms(小写,大写,交替的小写字母,交替的大写字母),尽管有些键可能未分配。当您要求与KeySym相对应时KeyCode,您需要提供一个索引;索引0(如您的代码中一样)将获得未移位的未修改字符。

对于给定的按键,转换为KeySym会考虑到修饰键的状态。其中有八个,包括ShiftLock修饰符。忽略Lock会使情况复杂化的Shift修饰键通常会将小写字母转换为大写字母(对于字母键)。

键盘处理比简短的摘要要复杂得多,但这只是一个开始。

对于您的任务,您可能应该看看XkbKeysymToModifiers

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么XKeysymToKeycode()使我所有的键都小写?

来自分类Dev

为什么我所有的窗口按钮都右对齐,但是镀铬按钮在左侧?

来自分类Dev

为什么我所有的android studio项目都命名为app

来自分类Dev

为什么我所有的猫鼬请求都超时了?

来自分类Dev

为什么我所有的窗口按钮都右对齐,但是镀铬按钮在左侧?

来自分类Dev

Swift:为什么我所有的可选变量都看起来像“ Optional(305.502)”

来自分类Dev

为什么我所有的 BST 遍历都按顺序返回值?

来自分类Dev

为什么我所有的 wordpress 页面都重定向到主页?

来自分类Dev

为什么我所有的Excel 2016文件都打开到邮票大小的大小?

来自分类Dev

为什么我的所有按钮的下拉内容都相同

来自分类Dev

pygame为什么不渲染我所有的精灵?

来自分类Dev

为什么querySelectorAll不选择我所有的元素?

来自分类Dev

为什么我不能 git bundle 所有的父母?

来自分类Dev

为什么不是所有的Linux软件包/软件都采用.deb格式?

来自分类Dev

为什么不是所有的Linux软件包/软件都采用.deb格式?

来自分类Dev

为什么即使所有的 FIRST 集合都相同,这个文法还是 LL(1)?

来自分类Dev

是什么使我所有的浏览器都拒绝保持登录状态?

来自分类Dev

我所有的列表框都位于顶部

来自分类Dev

我所有的Windows驱动程序都掉了

来自分类Dev

我所有的互联网连接都崩溃了

来自分类Dev

为什么我的列表没有存储我所有的输入?

来自分类Dev

为什么不是所有的flexbox元素都表现得像flexbox div一样?

来自分类Dev

为什么不是所有的NUnit测试类别都显示在“测试资源管理器”中?

来自分类Dev

为什么不是所有的flexbox元素都表现得像flexbox div一样?

来自分类Dev

为什么我不能使用我所有的8 GB RAM?

来自分类Dev

为什么我没有获得所有的正则表达式捕获内容?

来自分类Dev

为什么我不将所有4个元素都放在同一行中?

来自分类Dev

为什么我的所有页面都无法在标签栏上打开?

来自分类Dev

为什么我的所有额外RAM在Windows 7中都标记为“保留的硬件”?

Related 相关文章

  1. 1

    为什么XKeysymToKeycode()使我所有的键都小写?

  2. 2

    为什么我所有的窗口按钮都右对齐,但是镀铬按钮在左侧?

  3. 3

    为什么我所有的android studio项目都命名为app

  4. 4

    为什么我所有的猫鼬请求都超时了?

  5. 5

    为什么我所有的窗口按钮都右对齐,但是镀铬按钮在左侧?

  6. 6

    Swift:为什么我所有的可选变量都看起来像“ Optional(305.502)”

  7. 7

    为什么我所有的 BST 遍历都按顺序返回值?

  8. 8

    为什么我所有的 wordpress 页面都重定向到主页?

  9. 9

    为什么我所有的Excel 2016文件都打开到邮票大小的大小?

  10. 10

    为什么我的所有按钮的下拉内容都相同

  11. 11

    pygame为什么不渲染我所有的精灵?

  12. 12

    为什么querySelectorAll不选择我所有的元素?

  13. 13

    为什么我不能 git bundle 所有的父母?

  14. 14

    为什么不是所有的Linux软件包/软件都采用.deb格式?

  15. 15

    为什么不是所有的Linux软件包/软件都采用.deb格式?

  16. 16

    为什么即使所有的 FIRST 集合都相同,这个文法还是 LL(1)?

  17. 17

    是什么使我所有的浏览器都拒绝保持登录状态?

  18. 18

    我所有的列表框都位于顶部

  19. 19

    我所有的Windows驱动程序都掉了

  20. 20

    我所有的互联网连接都崩溃了

  21. 21

    为什么我的列表没有存储我所有的输入?

  22. 22

    为什么不是所有的flexbox元素都表现得像flexbox div一样?

  23. 23

    为什么不是所有的NUnit测试类别都显示在“测试资源管理器”中?

  24. 24

    为什么不是所有的flexbox元素都表现得像flexbox div一样?

  25. 25

    为什么我不能使用我所有的8 GB RAM?

  26. 26

    为什么我没有获得所有的正则表达式捕获内容?

  27. 27

    为什么我不将所有4个元素都放在同一行中?

  28. 28

    为什么我的所有页面都无法在标签栏上打开?

  29. 29

    为什么我的所有额外RAM在Windows 7中都标记为“保留的硬件”?

热门标签

归档