Как обнаружить наличие определенного устройства - PullRequest
6 голосов
/ 29 декабря 2011

Каковы хорошие способы обнаружения присутствия определенного устройства, подключенного к компьютеру, в приложении C #? Программно, конечно. Мне нужно поддерживать Windows XP и 7.

Фон

Мне дали огромное приложение на C #, которое использует подключенное устройство. Устройства изготовлены на заказ и не предназначены для использования без программного обеспечения. Когда приложение C # запускается, оно ищет такие подключенные устройства и связывается с ними, когда это необходимо. Может быть более одного подключенного устройства. Я не смотрел в исходный код, который ищет устройства. Устройства подключаются к ПК с помощью USB или последовательного кабеля. Они отображаются как COM-порт в диспетчере устройств. Иногда между ПК и устройством может быть концентратор USB или преобразователь последовательного интерфейса в USB.

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

Мне сказали изучить алгоритм поиска устройства и, если возможно, найти лучшее решение и заменить текущую реализацию. Раньше я не выполнял подобного рода задач, и мне нужно узнать, как Windows управляет устройствами под капотом.

Как я могу искать определенные подключенные устройства в C #? Каковы некоторые хорошие практики и что я должен знать или избегать?

1 Ответ

3 голосов
/ 29 декабря 2011

Вы можете найти все устройства в реестре: HKLM / CurrentControlSet / Enum (http://msdn.microsoft.com/en-us/library/windows/hardware/ff546173(v=vs.85).aspx)

Но будет проблема с последовательным портом.Вы не можете быть уверены, какое устройство подключено к последовательному порту.Это может быть мобильный телефон, модем, мышь, ваше устройство, другое пользовательское устройство и т. Д. Чтобы гарантировать, что это ваше устройство подключено к данному последовательному порту, вы должны попытаться установить с ним связь.И если он отвечает правильно - тогда да, это ваше устройство.

Из-за этого многие программы, работающие с последовательными устройствами, просят пользователя вручную выбрать последовательный порт, к которому подключено устройство.

UPD:

Еще одна ссылка о перечислении последовательных портов: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/afb62e84-53e5-4f17-ba91-8de15c4c2e38/

...