解决方法
可以使用IOKit和HIDManager类来完成.
如果需要对键盘进行独占访问,则可以使用kIOHIDOptionsTypeSeizeDevice选项,但必须以root权限运行程序.
// Create a manager instance IOHIDManagerRef manager = IOHIDManagerCreate(kcfAllocatorDefault,kIOHIDManagerOptionNone); if (CfgetTypeID(manager) != IOHIDManagerGetTypeID()) { exit(1); } // Setup device filtering using IOHIDManagerSetDeviceMatching //matchingdict = ... IOHIDManagerSetDeviceMatching(manager,matchingdict); // Setup callbacks IOHIDManagerRegisterDeviceMatchingCallback(manager,Handle_DeviceMatchingCallback,null); IOHIDManagerRegisterDeviceRemovalCallback(manager,Handle_RemovalCallback,null); IOHIDManagerRegisterInputValueCallback(manager,Handle_InputCallback,null); // Open the manager and schedule it with the run loop IOHIDManagerOpen(manager,kIOHIDOptionsTypeSeizeDevice); IOHIDManagerScheduleWithRunLoop(manager,CFRunLoopGetCurrent(),kcfRunLoopDefaultMode); // Start the run loop //...
更详细的信息可以在Apple文档中找到:http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html
我在申请中使用的完整代码可以在这里找到:
https://gist.github.com/3783042