Linux 具有键盘布局的库

Linux 具有键盘布局的库,linux,windows,macos,keyboard-layout,Linux,Windows,Macos,Keyboard Layout,我正在为我11个月大的女儿开发一个程序,让她在我的笔记本电脑键盘上打字时(嗯,更多的是击碎键盘)感到愉悦。 它已经非常好用了,因为她和她的侄子(同龄)似乎很喜欢它,我想也许其他孩子也会喜欢 我现在遇到的问题是:当按下一个键时,屏幕上会画出一些东西。绘制图片的位置取决于按键在键盘上的物理位置。因此,我需要知道连接键盘的布局。目前我使用的是硬编码的en_-US布局,但也许有一天,一个法国小孩想要使用它 在linux上,我可以使用LANG环境变量找到区域设置,我想我可以从xorg/x11文件下面的一些

我正在为我11个月大的女儿开发一个程序,让她在我的笔记本电脑键盘上打字时(嗯,更多的是击碎键盘)感到愉悦。 它已经非常好用了,因为她和她的侄子(同龄)似乎很喜欢它,我想也许其他孩子也会喜欢

我现在遇到的问题是:当按下一个键时,屏幕上会画出一些东西。绘制图片的位置取决于按键在键盘上的物理位置。因此,我需要知道连接键盘的布局。目前我使用的是硬编码的en_-US布局,但也许有一天,一个法国小孩想要使用它

在linux上,我可以使用LANG环境变量找到区域设置,我想我可以从xorg/x11文件下面的一些未记录文件中检索布局。但我正在寻找一个更便携的版本,它可以在发行版之间工作,也可以在microsoft windows甚至macos x上工作

我当然在谷歌上搜索过,但什么也没找到。那么,有人知道C/C++中的解决方案吗?如果在多个平台上运行时充满了#ifdef语句,那么这就不是问题


既然您已经在使用SDL,那么使用内置功能是有意义的。这将为您提供通过软件可能获得的所有信息(根据当前键盘布局,从键盘硬件提供的扫描码到)

由于键盘制造商可以自由地构建任何键的物理布局(),所以要想在所有键盘上获得按键的物理位置几乎是不可能的。而且,由于通常只对按下的键的含义感兴趣,因此应该开发这样一个库的用例很少甚至没有。因此,我怀疑是否有任何图书馆可以帮助你解决这个问题


正如一些评论者提到的,我认为通过使用SDL函数可以接收的扫描码值,可以为大多数键盘找到一个很好的解决方案。

在OS X上,事件中可用的虚拟键代码已经指示了键在键盘上的标称位置。也就是说,有一个键代码名为
kVK\u ANSI\u a
。这不是通过键盘布局处理时产生“A”字符的键。在标准ANSI键盘中,该键位于“A”键的位置。所以,它是位于中间的字母键中最左边的一个键,即使这个键产生“Q”,因为用户使用法语布局。我同意肯。据我所知,您可以对X11和MS Windows执行相同的操作,我100%确信这一点。“原始密钥代码”几乎将1:1映射到QWERTY。因此,如果你在代码被键映射转换之前捕获它们,你就得到了答案。