L'interface de périphérique de classe HID est définitivement ce dont vous avez besoin. Il y a fondamentalement deux étapes:
Vous devez d'abord trouver les dispositifs de souris. Pour ce faire, vous devez construire un dictionnaire correspondant, puis rechercher dans le registre IO avec. Il y a un exemple de code here, vous devrez ajouter quelques éléments supplémentaires au dictionnaire afin que vous obteniez simplement les souris au lieu de tous les périphériques HID sur le système. Quelque chose comme ça devrait faire l'affaire:
// 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);
Vous devez ensuite écouter le X/Y/files d'attente de bouton des périphériques que vous trouvé ci-dessus. Ce sample code devrait vous diriger dans la bonne direction. L'utilisation des callbacks est beaucoup plus efficace que l'interrogation!
Le code HID semble beaucoup plus complexe qu'il ne l'est - il est rendu plutôt "verbeux" par les trucs CF.
Il est définitivement possible: pop-pop, un jeu d'Ambrosia Software, utilisé deux souris pour son mode multijoueur. Je ne sais pas exactement comment ils l'ont fait, mais je suis presque certain que c'était par le biais du gestionnaire HID. – hbw