2010-08-18 31 views
8

J'ai deux souris USB connectées à mon Mac, dont une que j'utilise comme scanner. J'ai besoin d'accéder aux données génériques X et Y mais je ne veux pas que ces données déplacent le curseur. Comment, dans un environnement de carbone ou de cacao, dois-je dire au système d'ignorer la souris comme un dispositif de pointage? Edit: après quelques recherches, j'ai trouvé que je pouvais désactiver la mise à jour de la position de la souris avec la fonction CGAssociateMouseAndMouseCursorPosition(), mais cela ne me permet pas de spécifier une seule souris. Quelqu'un peut-il expliquer la relation OS X entre les dispositifs de souris HID et le curseur? Il doit y avoir une liaison entre le matériel et le logiciel, appareil par appareil, mais je ne le trouve pas.Comment indiquer à OS X d'ignorer l'entrée de l'une des deux souris USB connectées?

Répondre

1

Je voudrais regarder dans l'écriture d'un pilote de l'espace utilisateur de base pour la souris. Cela vous permettra d'accéder directement à la souris en tant que périphérique USB. Vous pouvez également prendre le contrôle de l'appareil à partir du système pour votre usage exclusif.

Il y a une documentation ici:

Working With USB Device Interfaces

Pour démarrer, les mises en place des mesures pour se connecter à un périphérique USB aller comme ça (je pense, mon IOKit est rouillé)

comprennent < IOKit/IOKitLib.h> et < IOKit/usb/IOUSBLib.h>

  1. trouvez l'appareil qui vous intéresse en utilisant IOServiceMatching(). Cela vous permet de choisir le périphérique USB approprié en fonction de ses propriétés, notamment l'ID du fournisseur, & c. (Voir l'écran de l'outil IORegistryExplorer tourné ci-dessous)
  2. obtenir une instance plugin USB (appelons-le plugin) avec IOCreatePlugInInterfaceForService()
  3. utilisation plugin de l'étape 2 obtenir une interface périphérique (appelons-le device) en utilisant (**plugin)->QueryInterface()
  4. device représente une poignée de connexion à votre périphérique USB - ouvrez-le d'abord en utilisant (**device).USBDeviceOpen ou (**device).USBDeviceOpenSeize(). à partir de là, vous devriez être en mesure d'envoyer/recevoir des données.

Cela ressemble beaucoup à ce que je sais .. et il pourrait y avoir un moyen plus facile, mais c'est ce qui me vient à l'esprit. Il peut y avoir quelques avantages à avoir ce niveau de contrôle de l'appareil, pas sûr. bonne chance.

IORegistryExplorer screen shot