【发布时间】:2011-11-23 07:46:37
【问题描述】:
我正在寻找对 OS X 中原始键盘事件的应用程序范围的访问,可以使用 Cocoa 或 Carbon 框架(或任何底层 API,就此而言)。我知道我可以覆盖 NSApplication 的 sendEvent: 以获取原始键盘信息,但是对于元键(命令、控制、备用、移位等)不会显示为击键事件。我正在寻找类似于 Microsoft 的 DirectInput 框架的东西。
谢谢!
【问题讨论】:
标签: macos
我正在寻找对 OS X 中原始键盘事件的应用程序范围的访问,可以使用 Cocoa 或 Carbon 框架(或任何底层 API,就此而言)。我知道我可以覆盖 NSApplication 的 sendEvent: 以获取原始键盘信息,但是对于元键(命令、控制、备用、移位等)不会显示为击键事件。我正在寻找类似于 Microsoft 的 DirectInput 框架的东西。
谢谢!
【问题讨论】:
标签: macos
我认为相当于 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 要好得多。如果可以的话,我会直接使用它。
【讨论】:
Core Graphics 框架还包含一些有用的功能,作为远程操作系统的一部分。查找 CGRemoteOperation.h,并查看 Quartz Events reference。
您可以使用 Quartz Events 系统来安装特定于应用程序或系统范围的“事件点击”,它可以让您在相当低的级别上监控和注入键盘和鼠标事件。几年前,特定于应用程序的事件点击存在一些错误,但希望现在已经解决了。
我认为 HID 的东西主要用于驱动程序开发,所以如果您只是为您的应用程序寻找工具,HID 可能是矫枉过正。
【讨论】:
NSResponder 派生类有一个方法-(void)flagsChanged:当元键被按住时被调用。
【讨论】:
您可以使用 RegisterHotKeyEvent Carbon 函数,但我不确定您是否可以显式注册任何元键。
博文Program Global Hotkeys in Cocoa Easily 解释了如何做到这一点。
【讨论】: