2014-09-22 55 views
2

对于我的女儿(11个月大)我目前正在开发一个程序,让她在我的笔记本电脑键盘上打字(当然,更多的是砸它)招待她。 它已经非常好用了,因为她和她的侄子(同龄)似乎很喜欢它,所以我想也许其他孩子也可以。图书馆与键盘布局

我现在得到的问题如下:当按下某个键时,屏幕上会显示一些内容。绘制图片的位置取决于键盘上键的物理位置。所以为此,我需要知道连接的键盘的布局。目前我正在使用硬编码的en_US布局,但也许有一天是例如法国孩子想要使用它。

在linux上,我可以使用LANG环境变量找到语言环境,我想我可以从xorg/x11文件下的某个未公开文件检索布局。但我正在寻找一个更便携的版本,它可以在分发之间进行工作,但也可以在微软窗口甚至macos x上运行。

我当然搜索了它,但找不到任何东西。那么有谁知道C/C++中的解决方案?如果它充满#ifdef语句在多个平台上工作,那么这不是问题。

the program this is all about

+1

在OS X上,事件中可用的虚拟键码已经指示键盘上键的名义位置。也就是说,有一个名为'kVK_ANSI_A'的关键代码。这不是通过键盘布局处理时产生'A'字符的关键。这是在标准ANSI键盘的'A'键位置上的关键。所以,它是位于字母键中间位置最左边的键,即使该键产生了'Q',因为用户正在使用法语版式。 – 2014-09-27 05:47:53

+0

我同意肯。据我所知,你可以用X11做同样的事情,而且MS-Windows,我可以像以前那样做100%确定。 “原始密钥代码”几乎将1对1映射到QWERTY。因此,如果您在通过键盘映射转换之前捕获代码,则您已得到答案。 – 2014-10-03 03:24:02

回答

1

既然你已经在使用SDL,这将是有意义的使用内置的keyboard input handling功能。这应该会给你所有可能通过软件获得的信息(从键盘硬件提供的扫描码到基于当前键盘布局的semantic meaning of the pressed key)。

由于键盘制造商可以自由构建键的任何物理布局(some keyboards do not have any keys at all),所以在所有键盘上获得所按键的物理位置的rocksolid解决方案几乎是不可能的。而且由于通常只有被按下的键的含义才是有意义的,因此在这种情况下应该开发这样一个库的用处不大。因此,我怀疑有没有任何图书馆可以帮助你解决这个问题。

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