Comment gérer plusieurs périphériques USB MIDI identiques

Mon application c # doit utiliser plusieurs interfaces MIDI USB identiques provenant du même fabricant.

Dans le gestionnaire de périphériques, tous les périphériques apparaissent avec le même nom de pilote / CLSID – seul le PNPDeviceID est différent. Lorsque je liste toutes les entrées / sorties MIDI (en utilisant MIDI-dot-net), elles apparaissent comme suit:

  • ACME-MIDI: Port 1
  • 1- ACME-MIDI: Port 1
  • 2- ACME-MIDI: Port 1

Malheureusement, ces noms ne sont pas toujours les mêmes pour le même appareil. Les ports du périphérique 1 apparaissent parfois sous la forme “ACME-MIDI: Port 1” et parfois sous la forme “1-ACME: Port 1” (ils changent, par exemple, après un redémarrage).

J’ai utilisé différentes méthodes pour essayer de trouver quel nom appartient à quel périphérique (SetupDi, WMI, Win32_PnPSignedDriver, …), mais j’obtiens l’ID du périphérique OU les noms de port qu’il indique, mais je ne parviens pas à trouver le port MIDI indiqué. nom (ACME-MIDI: Port n) à l’aide de l’ID du périphérique ou de la clé du pilote.

Aucune suggestion?

Mettre à jour

Je cherche toujours une solution pour répertorier les ports d’entrée / sortie d’une interface USB MIDI sur un port donné (par exemple, à l’aide de l’API Windows). On dirait que c’est assez délicat, c’est pourquoi je commence une prime pour cela.

Malheureusement, lorsque vous utilisez uniquement les API MIDI, il n’ya aucun moyen de différencier les périphériques. Vous devez compter sur leur nom. Heureusement, même si l’ordre des périphériques peut changer, j’ai appris que cela ne se produit généralement pas au redémarrage. Cependant, comme vous l’avez vu, cela est possible.

J’ai déjà traité cela dans mon propre logiciel en invitant l’utilisateur à appuyer sur une touche ou à déplacer un bouton de commande sur un périphérique pour les différencier.