L'interfaccia dispositivo di classe HID è sicuramente ciò di cui hai bisogno. Ci sono fondamentalmente due passaggi:
Prima devi trovare i dispositivi del mouse. Per fare questo è necessario costruire un dizionario corrispondente e quindi cercare nell'IO Registro con esso. C'è del codice di esempio here, sarà necessario aggiungere alcuni elementi aggiuntivi al dizionario in modo da ottenere solo i mouse anziché tutti i dispositivi HID sul sistema. Qualcosa del genere dovrebbe fare il trucco:
// 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);
È quindi necessario ascoltare la X/Y code/pulsante da dispositivi che si trovano sopra. Questo sample code dovrebbe indirizzarti nella giusta direzione. L'utilizzo dei callback è molto più efficiente del polling!
Il codice HID sembra molto più complesso di quanto non sia - è reso piuttosto "verboso" dal materiale CF.
È sicuramente possibile: pop-pop, un gioco di Ambrosia Software, utilizzava due mouse per la modalità multiplayer. Non so esattamente come l'hanno fatto, ma sono quasi sicuro che fosse attraverso il gestore HID. – hbw