2011-12-30 51 views

回答

5

它可以通過使用由於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 
//... 

更詳細的信息可以在蘋果的文檔在這裏找到:http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html

我用完整的代碼我應用程序可以在這裏找到: https://gist.github.com/3783042

+0

非常感謝!我不知道如何,但我沒有得到通知,說這個問題得到了答覆。我很高興終於知道如何做到這一點。我試用了你的示例代碼,它的功能就像一個魅力。 – JayGee 2014-03-13 23:12:28

-1

我要採取刺在這個很短,但寫自己的驅動程序,你不能攔截緩衝。這是爲了防止鍵盤記錄器和其他惡意程序。一切都必須通過操作系統。

+0

錯誤:您可以使用userland HID接口和kIOHIDOptionsTypeSeizeDevice獲得對設備的獨佔訪問權限,而不需要kext。如果你不需要獨佔訪問,程序甚至不必以root權限運行。 – GaretJax 2012-09-27 07:36:27

+0

我錯了,你應該張貼作爲一個答案,但自育人,我發現它確實需要對鍵盤root權限 – AnthonyFG 2012-09-27 14:10:29

+0

你是對的,但僅限於獨佔訪問,因爲我已經在我的評論中寫道,以及;) – GaretJax 2012-09-28 07:28:53