Как работать с несколькими одинаковыми MIDI USB-устройствами
Мое приложение C# должно использовать несколько идентичных USB MIDI-интерфейсов одного производителя.
В диспетчере устройств все устройства отображаются с одинаковым именем драйвера / CLSID - отличается только PNPDeviceID. Когда я перечисляю все MIDI-входы / выходы (используя MIDI-dot-net), они выглядят следующим образом:
- ACME-MIDI: порт 1
- 1- ACME-MIDI: порт 1
- 2- ACME-MIDI: порт 1
К сожалению, эти имена не всегда одинаковы для одного и того же устройства. Порты устройства 1 иногда отображаются как "ACME-MIDI: порт 1", а иногда как "1-ACME: порт 1" (они меняются, например, после перезагрузки).
Я использовал разные способы, пытаясь найти, какое имя принадлежит какому устройству (SetupDi, WMI, Win32_PnPSignedDriver, ...), но я либо получаю идентификатор устройства, либо имена портов, о которых оно сообщает, но я не могу найти указанный MIDI-порт имя (ACME-MIDI: порт n) с помощью идентификатора устройства или ключа драйвера.
Какие-либо предложения?
Обновить
Я все еще ищу решение для перечисления портов ввода / вывода интерфейса USB MIDI на заданном порту (например, с помощью Windows API). Похоже, это довольно сложно, поэтому я начинаю награду за это.
1 ответ
К сожалению, при использовании одних только MIDI API нет возможности дифференцировать устройства. Вы должны полагаться на их имя. К счастью, хотя порядок устройств может измениться, по моему опыту, это обычно не происходит при перезагрузке. Однако, как вы видели, это возможно.
В прошлом я занимался этим в своем собственном программном обеспечении, предлагая пользователю нажать клавишу или переместить ручку управления на устройстве, чтобы выделить их.