【问题标题】:OSX Leopard keyboard input API other than cocoa可可以外的 OSX Leopard 键盘输入 API
【发布时间】:2011-04-20 11:06:32
【问题描述】:

我目前正在尝试在 OSX 上进行简单的键盘输入,现在我正在通过 Leopard HID Manager 对象进行操作,并且通常可以正常工作,但是由于这是相当低的级别,我想知道是否有可用的 API一些额外的功能构建它,如键重复或 Unicode 支持(因为当我在 HID I/O 级别捕获事件时,我认为我必须从头开始编写所有这些花哨的附加功能)。我知道碳事件处理程序(NewEventHandlerUPP)能够做到这一点,但我很确定它们已被弃用,因为你在当前的 OSX 参考中找不到任何关于它们的信息,而且我不想使用任何弃用的东西,所以我想知道如果我在搜索过程中没有遇到任何替代方案!

谢谢!

【问题讨论】:

    标签: macos events keyboard


    【解决方案1】:

    没有。

    在Unicode层面,Objective-C中接收输入的官方API是NSTextInputClient协议,键盘与程序之间处理输入的官方API是Input Method Kit

    而且您永远无法从头开始正确地编写足够花哨的额外内容。您需要获取用户对国际键盘的设置,并相应地修改获取的键。而且你永远不能从头开始编写一个输入法,将原始键输入变成中文或日文......

    所以,我认为明智的选择要么是

    1. 只需从键盘获取原始 ASCII 数据,不要追求更多,或者
    2. 至少在按键输入处理方面使用 Cocoa,以获得额外的功能。

    【讨论】:

    • 嘿,谢谢,我不能将原始 USB HID 输入转换为 OSX 虚拟键代码,然后使用 developer.apple.com/library/mac/#documentation/Carbon/Reference/… 根据键盘语言翻译键。到目前为止,这是我的想法!
    • UCTranslate 不处理通用输入法。它仅适用于键到字符映射是唯一的键盘,例如欧洲键盘。东亚键盘不行。而且,祝你好运获得使用它所需的UCKeyboardLayout 结构;它基于古老的rsrc 系统,现在被 .keylayout XML 文件取代。我不知道任何易于使用的 API 可以将 XML 转换为所需的 rsrc。说真的,只需使用 Cocoa 进行文本输入。
    • 这是我的想法:TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); CFDataRef layoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout *)CFDataGetBytePtr(layoutData);
    • 啊,我明白了。感谢您提供信息 :) 你为什么首先使用 HID 输入?
    • 嗯,我希望能够同时使用多个键盘,并在设计 c++ 键盘类的功能时考虑到可移植性。在这种情况下,Cocoa 并没有真正集成。虽然包装 cocoa 对我的窗口类来说很好,但我不能真正让它在键盘的 cocoa 中很好地工作,所以我选择了 HID 管理器。
    猜你喜欢
    • 2011-06-16
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多