用于辅助键盘的 OSX HID 过滤器? [英] OSX HID Filter for Secondary Keyboard?
问题描述
我想过滤第二个键盘上的键盘输入,并防止第二个键盘的键事件到达操作系统(自己处理它们).如何做到这一点?
I would like to filter keyboard input on a second keyboard, and prevent the key events for that second keyboard from reaching the OS (handle them myself). How can this be done?
推荐答案
可以通过IOKit和HIDManager类来实现.
It can be done by using IOKit and the HIDManager class.
如果需要独占访问键盘,可以使用 kIOHIDOptionsTypeSeizeDevice
选项,但程序必须以 root 权限运行.
If exclusive access to the keyboard is desired, the kIOHIDOptionsTypeSeizeDevice
option can be used, but the program will have to be run with root privileges.
获得此结果所需的代码存根如下所示:
A stub of the code required to obtain this result is shown below:
// 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
More detailed information can be found in the Apple docs over here: http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html
我用于我的应用程序的完整代码可以在这里找到:https://gist.github.com/3783042
The complete code I used for my application can be found here: https://gist.github.com/3783042
这篇关于用于辅助键盘的 OSX HID 过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!