OSX HID фильтр для вторичной клавиатуры? - PullRequest
7 голосов
/ 30 декабря 2011

Я хотел бы отфильтровать ввод с клавиатуры на второй клавиатуре и предотвратить попадание событий клавиатуры для этой второй клавиатуры в ОС (обрабатывать их самостоятельно). Как это можно сделать?

Ответы [ 2 ]

6 голосов
/ 28 сентября 2012

Это можно сделать с помощью 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

0 голосов
/ 26 сентября 2012

Я собираюсь попробовать это, но если не написать собственный драйвер, вы не можете перехватить буфер. Это делается для предотвращения кейлоггеров и других вредоносных программ. Все должно идти, хотя ОС.

...