用于辅助键盘的OSX HID过滤器?
我想在第二个键盘上过滤键盘输入,并防止第二个键盘的键盘事件到达OS(自己处理它们)。 如何才能做到这一点?
它可以通过使用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
我会对此进行一次刺探,但是没有编写自己的驱动程序,您无法拦截缓冲区。 这是为了防止键盘记录器和其他恶意程序。 一切都必须通过操作系统。
链接地址: http://www.djcxy.com/p/56913.html上一篇: OSX HID Filter for Secondary Keyboard?
下一篇: startBluetoothSco() throws Security Exception (BROADCAST