Blackman писал(а):VISA это делает без всяких условий. Исходная тема уже давно трансформировалась в тему о способах (технике, алгоритме, стиле ...) программного поиска требуемых ресурсов, а какой он - физический, виртуальный или "призрак" уже второе дело.
Вы тут маленько путаете "красное" и "горячее". С помощью
SetupDi... мы получаем информацию о
классе устройств, таких как класс модемов, класс последовательных портов и так далее. Ваш подход (
VISA Find - VISA Open - VISA Close) сваливает все девайсы в одну кучу. По крайней мере по той диаграмме, что вы привели, это так работает. Не спорю, можно это дело и улучшить - сделать анализ атрибутов сессии на тип устройства и т.п. А вот те
, что я выше выкладывал, выдают список портов заданного класса:
List COMs.vi - класс COM-портов,
List COMs - 2.vi - класс последовательных интерфейсов,
List COMs (Modems).vi - класс модемов. Всё это хозяйство, в первую очередь, предназначено решить задачу автора темы. Если было бы нужно, я бы объединил инфу по нескольким классам устройств в одном
Как я сказал уже по поводу "призрачного" порта - его можно перечислить, указав класс модемов для
GetClassDevs. Посмотрите
List COMs (Modems).vi. Он способен вернуть инфу по присутствующему в системе модему с вкладки "Сведения" диспетчера устройств. Номер порта, к сожалению, не возвращается через функции Setup API. Здесь нужно применить несколько иной подход:
http://forum.sources.ru/index.php?showt ... ew=showall Используя арсенал TAPI, можем без труда запросить у модема имя и порт, на котором он "сидит":
Честно, с Сей на
эти сорцы мне перегонять лень. Если остро встанет задача получения номера порта
модема, то можно будет повозиться. А пока... Я вижу, вы целиком и полностью довольны Визой и своим подходом.
Так что ни к чему лишние хлопоты.
Кроме прочего, я вижу, что VISA Find возвращает номер порта без friendly name. По крайней мере у меня в MAX'е имя порта нигде совсем не пишется (хотя, как видите, модем имеет своё наименование). У вас на картинке какое-то имя порта возвращается, но оно совсем не совпадает с тем, что указано в диспетчере устройств. Я это к чему... Сдаётся мне, что VISA Find использует стандартый "брутфорс"-приём через CreateFile. Сейчас у меня нет времени это проверять, но если так, то это увеличивает шанс на блокировку работающего устройства. Собираюсь проверить позднее.
Atom писал(а):А если в диспетчере во вкладке "Вид" поставить галку на "Показать скрытые устройства" - он где нибудь покажется? Может даже не обязательно в разделе портов.
Нет, не покажется никаким образом. Как бы получше сказать... Модем и есть COM-порт. Это как "котопёс": с одной стороны модем, с другой - COM-порт. Так что это одно целое.
Blackman писал(а):А теперь ситуация: В один прекрасный день Вы получите в списке более одного ресурса с Вашей "Волшебной строкой "). Что делать дальше? Где кофемолка, а где кофеварка?))
ТС может задать такой ID, что он никогда не совпадёт ни с каким другим ID какого-либо из существующих устройств. Может вообще сгенерить уникальный хэш своего прибора, который у каждого прибора будет разным (это к слову о двух одинаковых "железках").