【问题标题】:Direct access to keyboard events in OSX直接访问 OSX 中的键盘事件
【发布时间】:2011-11-23 07:46:37
【问题描述】:

我正在寻找对 OS X 中原始键盘事件的应用程序范围的访问,可以使用 Cocoa 或 Carbon 框架(或任何底层 API,就此而言)。我知道我可以覆盖 NSApplication 的 sendEvent: 以获取原始键盘信息,但是对于元键(命令、控制、备用、移位等)不会显示为击键事件。我正在寻找类似于 Microsoft 的 DirectInput 框架的东西。

谢谢!

【问题讨论】:

    标签: macos


    【解决方案1】:

    我认为相当于 DirectInput 的是 HID Manager。 HID 代表“人机接口设备”,HID Manager(有时称为 HIDLib)是 HID 的低级 API:键盘、鼠标和游戏杆。

    Leopard 有一个新的 HID 管理器 API,记录在 Technical Note TN2187 中。 Leopard 之前的 API 记录在 HID Class Device Interface Guide 中。我围绕旧 API 编写了一个 Objecive-C 包装器,DDHidLib,您可能会发现它很有用。 Leopard API 要好得多。如果可以的话,我会直接使用它。

    【讨论】:

    • 这是否取决于“启用辅助设备访问”?
    【解决方案2】:

    Core Graphics 框架还包含一些有用的功能,作为远程​​操作系统的一部分。查找 CGRemoteOperation.h,并查看 Quartz Events reference

    您可以使用 Quartz Events 系统来安装特定于应用程序或系统范围的“事件点击”,它可以让您在相当低的级别上监控和注入键盘和鼠标事件。几年前,特定于应用程序的事件点击存在一些错误,但希望现在已经解决了。

    我认为 HID 的东西主要用于驱动程序开发,所以如果您只是为您的应用程序寻找工具,HID 可能是矫枉过正。

    【讨论】:

      【解决方案3】:

      NSResponder 派生类有一个方法-(void)flagsChanged:当元键被按住时被调用。

      【讨论】:

        【解决方案4】:

        您可以使用 RegisterHotKeyEvent Carbon 函数,但我不确定您是否可以显式注册任何元键。

        博文Program Global Hotkeys in Cocoa Easily 解释了如何做到这一点。

        【讨论】:

          猜你喜欢
          • 2011-02-11
          • 1970-01-01
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 2010-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多