2010-05-06 22 views
5

La mia app C# deve gestire più dispositivi USB che sono lo stesso prodotto dello stesso produttore.Come stabilire a quale porta è collegato un dispositivo USB?

Se l'utente inserisce 3 dei miei dispositivi in, e quindi scollega uno di questi, devo sapere quale dei 3 dispositivi è stato scollegato.

Tuttavia, quando registro i dispositivi e ricevo le notifiche WM_DEVICECHANGE, i dati restituiti da DBT_DEVTYP_DEVICEINTERFACE sono identici per ciascuno dei dispositivi.

Se potessi ottenere le informazioni sulla porta USB quando i dispositivi arrivano o vengono rimossi, risolverebbe il mio problema, ma non riesco a trovare un modo per farlo.

Qualche suggerimento?

+0

Il driver di periferica USB presenta dei metodi per ottenere un numero di serie o altre informazioni di identificazione? – whatsisname

risposta

2

Non so nulla di C#, ma in C + Win32 regolare, è possibile utilizzare lo SetupAPI functions per enumerare un bus e analizzare tutti i dispositivi sul bus. Se si enumera il bridge host, dovrebbe essere possibile trovare i dispositivi nella gerarchia USB. L'articolo a cui mi sono collegato mostra come utilizzare l'API e, se si osserva la chiamata di sistema SetupDiGetClassDevs(), esiste un'opzione per il bus di sistema USB (ad esempio il parametro 2, "Enumeratore").

Inoltre, se si scarica il Windows Driver Kit, so che ha un'applicazione di esempio in grado di enumerare il bus USB e fornire informazioni su ciascun dispositivo USB. L'applicazione utilizza SetupAPI e potrebbe essere utile come riferimento.

So che Microsoft ha esposto gradualmente l'API Win32 come classi .NET, ma non sono sicuro di questa API.

+0

È possibile utilizzare le funzioni API Win32 in C# .Net. Platform Invoke Tutorial: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx – Brian

Problemi correlati