2010-05-06 1 views
5

Мое приложение C# должно управлять несколькими устройствами USB, которые являются идентичным продуктом от того же производителя.Как узнать, к какому порту подключен USB-устройство?

Если пользователь подключает 3 моих устройства, а затем отключает один из них, мне нужно знать, какое из 3 устройств было отключено.

Однако, когда я регистрирую устройства и получаю уведомления WM_DEVICECHANGE, данные, возвращаемые из DBT_DEVTYP_DEVICEINTERFACE, идентичны для каждого из устройств.

Если бы я мог получить информацию о порте USB, когда устройства приходят или удаляются, это решит мою проблему, но я не могу найти способ сделать это.

Любые предложения?

+0

Имеет ли драйвер USB-устройства какие-либо методы для получения серийного номера или любой другой идентифицирующей информации? – whatsisname

ответ

2

Я ничего не знаю о C#, но в обычном C + Win32 вы можете использовать SetupAPI functions для перечисления шины и зондирования всех устройств на шине. Если вы перечислите мост хоста, вы сможете найти свои устройства в иерархии USB. В этой статье я расскажу вам, как использовать API, и если вы посмотрите на системный вызов SetupDiGetClassDevs(), есть опция для системной шины USB (т. Е. Параметр 2, «Перечислитель»).

Кроме того, если вы загрузите комплект драйверов для Windows, я знаю, что у него есть пример приложения, которое может перечислять шину USB и предоставлять информацию о каждом USB-устройстве. Приложение использует SetupAPI, и оно может служить хорошей ссылкой.

Я знаю, что Microsoft постепенно раскрывает API Win32 как классы .NET, но я не уверен в этом API.

+0

Вы можете использовать функции API Win32 в C# .Net. Учебное пособие по платформе: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx – Brian