小编Com*_*fyS的帖子

使用X11在Linux上获取scancode而不是keycode

我正在尝试收听键盘输入(使用X11事件循环)并获取扫描码.这些扫描码应该指代密钥的物理位置,而不是它所键入的字符.问题是,我所能得到的只是KeySyms和KeyCodes,它们针对不同的语言进行了不同的映射(例如QWERTY vs QWERTZ).

我目前的解决方案是阅读"/ usr/share/X11/xkb/keycodes/evdev"文件.它包含密钥位置到密钥代码的映射.使用这个我可以简单地将任何键码转换回扫描码.我的猜测是,这不是一种稳定的做事方式.我根本不太了解Linux.这就是为什么我认为在这里问这可能是一个好主意.

假设大多数用户的机器正在使用这些evdev映射是否安全?如果没有,我还能在哪里找到实际使用的关键映射?或者是否有更好的解决方案?

linux x11 input xlib scancodes

6
推荐指数
1
解决办法
1537
查看次数

在静态库中声明函数,在使用相同库的应用程序中定义它

我想声明一个foo()在静态库内部调用的函数,并在静态库中调用它.但是,我想强制应用程序的用户提供定义foo().这样的事情在C/C++中是可能的吗?

所以作为一个例子,想象一下这是静态库:

在foo.h中:

void foo();
Run Code Online (Sandbox Code Playgroud)

在foo.cpp中:

#include "foo.h"

int main() {
   foo();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后在使用此静态库的应用程序中:

在app.cpp中:

#include "foo.h"

void foo() {
    // Do something here...
}
Run Code Online (Sandbox Code Playgroud)

我想这必须是例如Win32 API对其WinMain()功能的作用,这实际上取代了通常的main().这怎么工作呢?在上面的例子静态库当然会不编译,由于undefined referencefoo().

c c++

3
推荐指数
1
解决办法
159
查看次数

标签 统计

c ×1

c++ ×1

input ×1

linux ×1

scancodes ×1

x11 ×1

xlib ×1