2010-12-29 20 views
7

La función midiOutGetDevCaps devuelve una estructura MIDIOUTCAPS. Necesitaría información más específica al consultar un dispositivo usb midi en Windows XP, en particular, necesitaría la información que se muestra en "Ubicación" al abrir el dispositivo correspondiente utilizando el Administrador de dispositivos. Necesito esta información para distinguir mediante programación entre varias interfaces MIDI conectadas a una computadora. Usando midiOutGetDevCaps, obtengo de forma uniforme "Dispositivo de audio USB" para cada interfaz usb midi conectada a la computadora, por lo que es imposible distinguir entre las interfaces. Para empeorar las cosas, esta cadena está localizada, por ejemplo, en un Windows alemán obtendrá "USB Audiogerät" en lugar de "USB Audio Device".recuperando información detallada del dispositivo midi usb en Windows XP

+1

Realmente espero que haya una respuesta a esto. He tenido el mismo problema. Sin embargo, no creo que exista. Todo el software de audio y DAW que he usado tiene el mismo problema ... enumerar dispositivos con el mismo nombre al azar. Recuerde, los dispositivos MIDI no tienen una conexión inherente con el USB o cualquier hardware para el caso. Asociar dispositivos con una idea de hardware podría no ser el camino a seguir de todos modos, pero no conozco una solución viable. – Brad

+0

¿Qué le dicen los identificadores del fabricante y del producto? Supongo que seguirías teniendo problemas si tienes 2 de los mismos dispositivos enchufados ... – Goz

Respuesta

1

Supongo que depende de lo desesperado que estés. He tenido mi propia carrera con dispositivos USB. En mi caso, necesitaba enumerar ciertos dispositivos USB relacionados con el puerto COM. . . independientemente de si están actualmente conectados al sistema o no.

Es todo código propietario de la empresa, lo siento, no se puede publicar, pero la búsqueda de toda la información relativa dispositivos relacionados con USB comienza aquí (Perl):

$hostnamePrefix = "//$hostname/"; 
my $baseKey = "${hostnamePrefix}HKEY_LOCAL_MACHINE/System/CurrentControlSet/"; 
my $regVidList = Win32::TieRegistry->new("${baseKey}Enum/USB/", $optionsRef); 

Si la memoria no me falla es razonablemente sencillo estructura. Creo que en realidad tiene que recorrer dos secciones separadas del registro para obtener todo lo que necesita. . . Si está lo suficientemente desesperado como para intentar esto, me complace responder preguntas donde pueda, pero publicar el código requeriría la aprobación de nuestro departamento legal. (No es imposible, pero tomaría semanas obtener).

Además, aunque esto funcionará en XP. . . No tengo idea de cómo funcionará en Win7. (No sé de ninguna manera, nadie lo ha intentado todavía que yo sepa).

Codificando esto no fue tan malo (resultando Perl Script es alrededor de 1000 líneas de código que es casi el 50% de comentarios), pero resolver todas las relaciones entre las teclas y los casos especiales tomó varios días.

Cuestiones relacionadas