2011-12-30 22 views
7

Tôi muốn lọc đầu vào bàn phím trên bàn phím thứ hai và ngăn các sự kiện chính cho bàn phím thứ hai đó tiếp cận hệ điều hành (tự xử lý chúng). Điều này có thể giải quyết như thế nào?Bộ lọc OSX HID cho Bàn phím phụ?

Trả lời

5

Có thể thực hiện bằng cách sử dụng IOKit và lớp HIDManager.

Nếu muốn truy cập độc quyền vào bàn phím, tùy chọn kIOHIDOptionsTypeSeizeDevice có thể được sử dụng, nhưng chương trình sẽ phải chạy với quyền ưu tiên gốc.

Một sơ khai của mã cần thiết để có được kết quả này được hiển thị dưới đây:

// 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 
//... 

Thông tin chi tiết có thể được tìm thấy trong các tài liệu của Apple ở đây: http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html

Các mã hoàn chỉnh tôi sử dụng cho tôi có thể tìm thấy ứng dụng tại đây: https://gist.github.com/3783042

+0

Cảm ơn rất nhiều! Tôi không biết làm thế nào, nhưng tôi đã không nhận được thông báo rằng câu hỏi này đã được trả lời. Tôi vui mừng vì cuối cùng cũng biết cách làm điều này. Tôi đã thử mã mẫu của bạn và nó hoạt động như một sự quyến rũ. – JayGee

-1

Tôi sẽ tạm dừng việc này nhưng không viết được trình điều khiển của riêng bạn, bạn không thể chặn bộ đệm. Điều này là để ngăn chặn keyloggers và các chương trình độc hại khác. Tất cả mọi thứ đã đi mặc dù hệ điều hành.

+0

Sai: Bạn có thể sử dụng giao diện HID của người dùng và kIOHIDOptionsTypeSeizeDevice để có quyền truy cập độc quyền vào thiết bị mà không cần kext. Nếu bạn không cần truy cập độc quyền, chương trình thậm chí không cần phải chạy với quyền root. – GaretJax

+0

Tôi sai, bạn nên đăng câu trả lời, nhưng trong tự học tôi thấy nó yêu cầu quyền truy cập root cho bàn phím chỉ – AnthonyFG

+0

Bạn nói đúng, nhưng chỉ để truy cập độc quyền, như tôi đã viết trong bình luận của mình;) – GaretJax