Tôi đang cố gắng sử dụng IOHIDManager để nhận các sự kiện phím bổ trợ vì các cờ ca caoCác sự kiện thay đổi bị thiếu (khó phân biệt giữa bấm/thả, trái/phải nếu cả hai đều bị ngừng, v.v.) mã nơi tôi tạo người quản lý và đăng ký cuộc gọi lại.Sử dụng IOHIDManager để nhận các sự kiện phím bổ trợ
IOHIDManagerRef hidManager = IOHIDManagerCreate(kCFAllocatorDefault,
kIOHIDOptionsTypeNone);
if (CFGetTypeID(hidManager) != IOHIDManagerGetTypeID())
return 1;
CFMutableDictionaryRef capsLock =
myCreateDeviceMatchingDictionary(0x07, 0x39);
CFMutableDictionaryRef lctrl =
myCreateDeviceMatchingDictionary(0x07, 0xE0);
CFMutableDictionaryRef lshift =
myCreateDeviceMatchingDictionary(0x07, 0xE1);
CFMutableDictionaryRef lalt =
myCreateDeviceMatchingDictionary(0x07, 0xE2);
CFMutableDictionaryRef lsuper =
myCreateDeviceMatchingDictionary(0x07, 0xE3);
CFMutableDictionaryRef rctrl =
myCreateDeviceMatchingDictionary(0x07, 0xE4);
CFMutableDictionaryRef rshift =
myCreateDeviceMatchingDictionary(0x07, 0xE5);
CFMutableDictionaryRef ralt =
myCreateDeviceMatchingDictionary(0x07, 0xE6);
CFMutableDictionaryRef rsuper =
myCreateDeviceMatchingDictionary(0x07, 0xE7);
CFMutableDictionaryRef matchesList[] = {
capsLock,
lctrl,
lshift,
lalt,
lsuper,
rctrl,
rshift,
ralt,
rsuper
};
CFArrayRef matches = CFArrayCreate(kCFAllocatorDefault,
(const void **)matchesList, 9, NULL);
IOHIDManagerSetDeviceMatchingMultiple(hidManager, matches);
IOHIDManagerRegisterInputValueCallback(hidManager,
myHandleModifiersCallback, NULL);
IOHIDManagerScheduleWithRunLoop(hidManager, CFRunLoopGetMain(),
kCFRunLoopDefaultMode);
IOHIDManagerOpen(hidManager, kIOHIDOptionsTypeNone);
Tuy nhiên, gọi lại không bao giờ được chạy. Tôi có thiếu gì không?
Tôi không hiểu đầy đủ các trang sử dụng HID, vì vậy tôi không biết có sử dụng Generic Desktop Page (0x01) với ID sử dụng bàn phím (06) hoặc Bàn phím/Trang bàn phím (0x07) hay không ID cho các khóa riêng lẻ. Có thể là có cái gì đó để làm với nó?
Bạn đã tìm thông tin về cách phân tích cú pháp 'giá trị' trong hàm gọi lại của bạn ở đâu, để có được những thứ như scancode? Bạn có một số (có thể đọc) tham khảo về điều đó, hoặc làm thế nào bạn tìm ra nó? – jalf