2010-05-06 50 views
5

Mi aplicación C# debe administrar varios dispositivos USB que son el mismo producto del mismo fabricante.¿Cómo saber a qué puerto está conectado un dispositivo USB?

Si el usuario enchufa 3 de mis dispositivos y luego desenchufa uno de ellos, necesito saber cuál de los 3 dispositivos fue desenchufado.

Sin embargo, cuando registro los dispositivos y recibo las notificaciones WM_DEVICECHANGE, los datos devueltos por DBT_DEVTYP_DEVICEINTERFACE son idénticos para cada uno de los dispositivos.

Si pudiera obtener la información del puerto USB cuando los dispositivos llegaran o fueran eliminados, resolvería mi problema, pero no puedo encontrar la manera de hacerlo.

¿Alguna sugerencia?

+0

¿El controlador del dispositivo USB presenta algún método para obtener un número de serie o cualquier otra información de identificación? – whatsisname

Respuesta

2

No sé nada sobre C#, pero en C + Win32 normal, puede usar el SetupAPI functions para enumerar un bus y probar todos los dispositivos en el bus. Si enumera el puente de host, debería poder encontrar sus dispositivos en la jerarquía USB. El artículo que he vinculado le muestra cómo usar la API, y si mira la llamada al sistema SetupDiGetClassDevs(), hay una opción para el bus del sistema USB (es decir, el parámetro 2, "Enumerator").

Además, si descarga el Windows Driver Kit, sé que tiene una aplicación de muestra que puede enumerar el bus USB y proporcionar información sobre cada dispositivo USB. La aplicación usa SetupAPI, y podría servir como una buena referencia.

Sé que Microsoft ha expuesto gradualmente la API Win32 como clases .NET, pero no estoy seguro acerca de esta API.

+0

Puede usar las funciones de API de Win32 en C# .Net. Tutorial de Invocación de plataforma: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx – Brian

Cuestiones relacionadas