Cocoa 中用于在 unicode 字符和虚拟键码之间转换的内置函数?
有没有办法将 unicode 字符转换为 Mac 虚拟键码? (不构建我自己的表?)看起来 Windows 上有 VkKeyScanEx,但我不知道 OS X 上的 Cocoa 有类似的功能。
我实际上正在尝试为 iPad 执行此操作。我想将从键盘获取的字符转换为按键代码,因为 iPad 键盘不提供按键代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我对为什么需要标记 iPhone/iPad 很感兴趣——你肯定可以在 OS X 中完成所有转换吗?此外,iPhone/iPad“键盘”从根本上来说是一种文本输入方法(参见 UITextInput)——并不是说它“不提供键码”;而是说它“不提供键码”。根本就没有(当你点击“A”,按住一会儿,然后选择一个随机重音版本时,它应该提供什么键码/修饰符?)。
如果您打算这样做,请在 iPad 和 OS X 上的各种(奇怪的)输入法上进行测试。如果有一个 API 可以插入字符串,请这样做(但这对于需要插入字符串的游戏来说可能效果不太好)读取扫描码...)。您甚至可以编写接受 Unicode 字符串的自定义输入法扩展。
当 Dvorak VNC 客户端输入 QWERTY VNC 服务器时会发生什么是有争议的……
我将以一个离题的故事结束:
一年多前(在我拥有 iPhone 之前),我得到了一台 N810。如果说有什么不同的话,那就是它是一个还算不错的 SSH/VNC 客户端,并且有一个不错的键盘。
只不过它不是标准键盘。 1 是 Fn-Q 并且 !是 Fn-A,但是当我输入 Fn-A 来获取“!”时,VNC 服务器最终输入“1”。键入 Shift-Fn-A 会显示“!”我一直在寻找(我认为 Shift-Fn-Q 也有效)。
某个地方的某个东西解析了字符“!”,确定它具有与“1”相同的扫描代码,并在不带修饰符的情况下键入 1 的扫描代码。它可以自动按住 Shift。它甚至可以插入字符串。相反,它只是失败了。
I'm interested in the reason why it needs to be tagged iPhone/iPad — surely you can do all the conversion in OS X? Also, the iPhone/iPad "keyboard" is fundamentally a text input method (see UITextInput) —it's not that it "won't supply keycodes"; there simply aren't any (and what keycode/modifiers should it supply when you tap "A", hold for a bit, and pick a random accented version?).
If you're going to do this, test it on a variety of (odd) input methods on both the iPad and OS X. If there's an API to insert a string, do so (but this might not work so well for games which read scan codes...). You could even write a custom input method extension which accepted Unicode strings.
It's debatable what should happen when a Dvorak VNC client types to a QWERTY VNC server...
I'll end with a tangential story:
A little over a year ago (before I got an iPhone), I got a N810. If anything, it makes a half-decent SSH/VNC client and has a decent keyboard.
Except it's not a standard keyboard. 1 is Fn-Q and ! is Fn-A, but when I type Fn-A to get "!", the VNC server ends up typing "1". Typing Shift-Fn-A gives me the "!" I was looking for (I think Shift-Fn-Q also works).
Something, somewhere, parses the character "!", decides that it has the same scan code as "1", and types the scan code for 1 with no modifier. It could automatically hold down Shift. It might even be able to insert a string. Instead, it just fails.
GoogleCode 上的 ShortcutRecorder 项目有一个 NSValueTransformer 子类“http://code.google.com/p/shortcutrecorder/source/browse/trunk/Source/SRKeyCodeTransformer.m” rel="nofollow">将字符串转换为键码,反之亦然,但我不是确定它是否可以在 iOS 上运行。不过,这是一个开始寻找的好地方。
The ShortcutRecorder project on GoogleCode has an
NSValueTransformer
subclass for converting strings to keycodes and vice versa, but I'm not sure if it'll work on iOS. It's a great place to start looking, though.