转换国际键盘的CGKeyCodes

时间:2011-03-10 00:12:00

标签: objective-c cocoa macos-carbon cgkeycode

在我的应用程序中,我需要将快捷键映射到键盘上“1”键左侧的键。在标准的美式键盘上,这将是反引号字符(“`”),这是键码50号。不幸的是,国际键盘(例如法语键盘)在1键的左侧有一个不同的键(正斜杠键“/”),因此对于未使用美式键盘的用户而言,密钥代码的硬编码会导致意外结果。

有没有办法在运行时将美国密钥代码转换为国际键盘的密钥代码,或者根据键盘上的密钥位置以编程方式确定密钥代码?

1 个答案:

答案 0 :(得分:3)

“1”左侧键上的字符在不同的键盘布局上有所不同,但虚拟键代码应该相同。如果你看HIToolbox/Events.h,你可以看到常数kVK_ANSI_Grave,它代表你正在谈论的关键;在常量列表上方,有一条注释表明,在虚拟键代码级别,相等意味着物理键是相同的,尽管扫描代码可能不同,并且发出的字母可能不同。

换句话说:键盘驱动程序从扫描代码映射到虚拟键代码,键盘布局(您可以在“系统偏好设置”中更改)从虚拟键代码映射到字符。

这可能都是错的;我没有用于验证这些断言的非美国键盘。