Giao diện thiết bị lớp HID chắc chắn là những gì bạn cần. Về cơ bản có hai bước:
Trước tiên, bạn cần tìm các thiết bị chuột. Để làm điều này, bạn cần phải xây dựng một từ điển phù hợp và sau đó tìm kiếm IO Registry với nó. Có một số mã mẫu here, bạn sẽ cần phải thêm một số yếu tố bổ sung vào từ điển để bạn chỉ nhận được những con chuột thay vì tất cả các thiết bị HID trên hệ thống. Một cái gì đó như thế này nên làm các trick:
// Set up a matching dictionary to search the I/O Registry by class
// name for all HID class devices`
hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey);
// Add key for device usage page - 0x01 for "Generic Desktop"
UInt32 usagePage = 0x01;
CFNumberRef usagePageRef = ::CFNumberCreate(kCFAllocatorDefault, kCFNumberLongType, &usagePage);
::CFDictionarySetValue(hidMatchDictionary, CFSTR(kIOHIDPrimaryUsagePageKey), usagePageRef);
::CFRelease(usagePageRef);
// Add key for device usage - 0x02 for "Mouse"
UInt32 usage = 0x02;
CFNumberRef usageRef = ::CFNumberCreate(kCFAllocatorDefault, kCFNumberLongType, &usage);
::CFDictionarySetValue(hidMatchDictionary, CFSTR(kIOHIDPrimaryUsageKey), usageRef);
::CFRelease(usageRef);
Sau đó bạn cần nghe hàng đợi nút X/Y/từ các thiết bị bạn tìm thấy ở trên. Điều này sample code nên chỉ cho bạn đi đúng hướng. Sử dụng callbacks hiệu quả hơn nhiều so với việc bỏ phiếu!
Mã HID trông phức tạp hơn rất nhiều - nó được tạo ra khá "dài dòng" bởi các công cụ CF.
Chắc chắn có thể: pop-pop, một trò chơi của Ambrosia Software, sử dụng hai con chuột cho chế độ nhiều người chơi của nó. Tôi không biết chính xác làm thế nào họ đã làm nó, nhưng tôi gần như chắc chắn nó đã được thông qua HID Manager. – hbw