辅助键盘的OSX HID过滤器?

时间:2011-12-30 04:22:42

标签: macos cocoa keyboard hid

我想在第二个键盘上过滤键盘输入,并防止第二个键盘的键事件到达操作系统(自己处理)。怎么办呢?

2 个答案:

答案 0 :(得分:6)

可以使用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

答案 1 :(得分:-1)

我要对此进行一次尝试,但是如果没有编写自己的驱动程序,则无法拦截缓冲区。这是为了防止键盘记录程序和其他恶意程序。一切都必须通过操作系统。