【发布时间】:2011-01-18 00:50:00
【问题描述】:
有没有办法以编程方式找出计算机的键盘类型(即键的位置,以及在哪些位置存在哪些额外的键)?
如果键盘很不标准,稍微有点误差是可以接受的,但总的来说,重点是构建一个类似屏幕键盘的应用程序,可以在屏幕上动态绘制键盘布局,准确度很高。
【问题讨论】:
-
您使用什么语言?
-
无论 Windows 使用什么 :) ... 解决方案是否因语言而异?
有没有办法以编程方式找出计算机的键盘类型(即键的位置,以及在哪些位置存在哪些额外的键)?
如果键盘很不标准,稍微有点误差是可以接受的,但总的来说,重点是构建一个类似屏幕键盘的应用程序,可以在屏幕上动态绘制键盘布局,准确度很高。
【问题讨论】:
当连接到计算机时,键盘会向操作系统发送“扫描码”。在 Windows 上,扫描代码然后被转换为虚拟键(键盘的硬件独立映射),然后转换为真实字符。
windows API 的MapVirtualKeyEx() 函数允许您在扫描码、虚拟键和字符之间进行转换。它还应该能够告诉您密钥是否不存在。
与GetKeyboardLayout() 一起告诉您在任何时间点哪个键盘处于活动状态(不同运行的应用程序的键盘布局可能不同),它应该允许您构建一个非常准确的键盘映射。
不管怎样,看看keyboard input section of the MSDN
我要补充一点,所有键盘的布局几乎相同。虽然无法知道按键的物理位置,但您可能可以通过扫描码和您自己的键盘的基本知识来猜测。
【讨论】:
没有一种机制可以让键盘告诉 Windows 其物理布局是什么样的。使用 Windows 版本的屏幕键盘 osk.exe 可以轻松查看。它似乎能够猜出机器的外形尺寸(笔记本电脑与台式机),但在我的笔记本电脑上,它与键盘的布局不匹配。
使用 osk.exe 布局作为模板,这样没有人会抱怨你的布局不匹配。
【讨论】: