Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Надо: Про модемы знать: 1) Имя модема (Name) 2) COM-порт (AttachedTo) 3) DeviceID Про порты (интересуют только установленные) знать: 1) имя порта (оно не обязательно COM#) Решение через WMI мне известно. На языке WMI то что мне надо: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. WMI меня не очень устраивает, хотя решение и полностью рабочее (ну почти, там есть тонкие глюки). И кстати долго , если скажем 100 модемов. Т.е. нужно взрослое решение типа API-ф-ций SetupDi... Думаю дорос уже, чтоб разобраться. Но никак не могу пока уверенно найти. М.б. кто знает? Решения типа чтения реестра нежелательно. Опрос через AT команды, TAPI и т.п.- не годится. Т.е. речь идет об установленных в системе ДЕВАЙСАХ и именно с этой позиции хочу решить задачу. Поясню еще: модем например может быть установлен и приаттачен к COM33 -это установленный девайс и он должен присутствовать в списке модемов (присутствует на вкладке Модемы в панели управления). А вот сам COM33 при этом может быть НЕ установлен в системе. И в этом случае COM33 не должен присутствовать в списке портов (и его при этом нельзя найти в диспетчере устройств ни в классе "порты", ни в каком-либо другом, здесь замечу что виртуальные порты не всегда в классе "Ports"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 21:35 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Обычно их в системе не больше четырёх. Можно сделать 4 вызова CreateFile("Com"+n,....) и посмотреть коды возврата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 22:28 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Насчёт модемов. Можно посмотреть функцию http://msdn.microsoft.com/en-us/library/windows/desktop/aa363259(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 22:33 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
На, разбирайся: http://www.codeproject.com/Articles/14412/Enumerating-windows-device Там есть исходник так чта... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 23:11 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
mayton, не то все. >не больше четырёх. ... вызова CreateFile("Com"+n Забываешь про виртуальные порты. В приложении com0com и аналогичных для пар портов например по умолчанию используются имена: "CNCA"+n <> "CNCB"+n И портов этих в системе может быть десятки и сотни. И никто не мешает установить модем на CNCA35. Попробуй. Возможно ли программно установить модем? Там приложен мой пример. VB6 проект но exe-шник есть. Код почти полностью приведен там же. Он установится даже без наличия в системе самого порта, увидишь модем и AttachedTo=CNCA35 в панели управления в "модемах". Задача про которую спрашиваю давно мной решена на WMI -лет 5 назад. Прилакладываю пример (опять же VB6 но с exe-шником). Мне нужна Enum-ерация, список всех портов (включая тех что не из класса Ports и со "странными" именами) и модемов в системе. Мне надо сделать то же самое но "по-серьезному", WMI долго работает. Скорее всего это SetupDi... По поводу GetCommProperties - не то. Мне нужно имя модема, AttachedTo (имя порта) и DeviceID. А приведенная тобой ф-ция не об этом. Причем метод которым я назначаю AttachedTo в своей проге установки модема: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. -он кривой, должно быть что-то другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 23:15 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
White OwlНа, разбирайся: http://www.codeproject.com/Articles/14412/Enumerating-windows-device.. Спасибо, вроде теплее. Скомпилировать с ходу не сумел, ну бог с ним, попробуем чего-нибудь полезное выдернуть. Но, судя по тому что отображает exe-шник... По модемам: только DeviceID, AttachedTo и даже Name не выводит. Ну enum-ерацию сделать очевидно можно (посмотреть как в коде делается). Здесь как вариант SetupDiGetDeviceRegistryProperty ("FriendlyName") -это ладно - будет "Name" А вот с AttachedTo остается только SetupDiOpenDevRegKey RegGetValueEx(hKeyDev, "AttachedTo" И вот не нравится мне этот "метод" прямого чтения реестра, пусть даже hKeyDev через API получен, а через RegistryProperty -никак не получить, уже пробовал в лоб причем, перебором всех GetDeviceRegistryProperty Должно что-то быть в API на тему Set/Get AttachedTo (название COM порта)!!! А вот по портам пока совсем непонятно. Потому что у виртуальных портов GUID м.б. другой (свой класс, свой раздел). А WMI, медленная гадина, ведь что интересно это как-то делает, т.е. enum-ерует все в одну кучу через "Select * from Win32_SerialPort", в том числе туда же нестандартные классы с нестандартными именами портов. Ладно, попробую пока с модемами помухлевать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 00:37 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
maytonОбычно их в системе не больше четырёх. Можно сделать 4 вызова CreateFile("Com"+n,....) и посмотреть коды возврата. Сейчас каждый USB-девайс может создавать COM-порт виртуальный, на сколько я знаю. А их столько может быть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 01:05 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
И портов этих в системе может быть десятки и сотни. И зачем тебе столько модемов на Винде? Что с ними делаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 01:07 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
maytonИ зачем тебе столько модемов на Винде? Что с ними делаешь? Ну, мог бы уже догадаться по моим топикам. Моя тема - VOIP телефония, в частности факсы через VOIP. Стандартная факс прога коннектится к VOIP через виртуальную пару портов. Внутренний порт смотрит в VOIP, внешний в факс прогу, на внешний порт целесообразно вешать драйвер стандартного модема. В продакшн системах ну реально скажем так до 60 портов, умножь на 2 (пара) -имеем 120. Естественно при таких количествах тормозное WMI бесит, списка модемов надо ждать несколько секунд. Плюс если в реестре в классе модемов есть по каким-то причинам бракованный entry "0000", а "0001", "0002"... -нормальные и работоспособные, то WMI вообще модемов не покажет (в этом глюк). Если по делу, вроде как с модемами все получилось. Единственное, что бесит - "AttachedTo" приходится доставать "ручками из реестра"-ничего умнее не нашел/не придумал (хотя это вполне надежно). М.б. есть идеи? А с портами ("Select * from Win32_SerialPort") я счас глянул в свои коды - оказывается могу не париться - я это не использую. Т.е. по логике программы я таки использую нормальные имена COM# для внешних портов куда вешаются модемы, и Enum-ерация делается через GetDefaultCommConfig function -она возвращает false при отсутствии порта. Проверяется естественно не COMDB а наличие порта как девайса (с повешенным на него драйвером порта). И да, я перебираю, но даже для сотни портов это быстрая процедура. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. А с модемами код такой родил. Что самое приятное, SetupDi... в данном случае корректно работает на x64 из-под 32-битного приложения. Т.е. драйвера устанавливать нельзя(нужно компилировать x64 код), а опрашивать -без проблем. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 05:38 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, Если по делу, вроде как с модемами все получилось. Единственное, что бесит - "AttachedTo" приходится доставать "ручками из реестра"-ничего умнее не нашел/не придумал (хотя это вполне надежно). Думаю что всё ОК. Другого источника информации ты не найдёшь. WMI скорее всего является просто интерфейсом к тому-же реестру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 11:05 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
maytonДмитрий77, бесит - "AttachedTo" приходится доставать "ручками из реестра"Думаю что всё ОК. Понимаешь, когда я читаю название порта: Код: vbnet 1. 2. 3. 4. 5. 6. 7. -это еще более менее прилично выглядит. А когда я назначаю название порта в процессе установки нового модема, 16072864 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. то попахивает какой-то подтасовкой. Смотри, SetupDiOpenDevRegKey всегда ошибается (драйвер пока не установлен и ветка реестра на этот момент отсутствует - я проверял, останавливая код через MsgBox-ы), поэтому я создаю пустую ветку SetupDiCreateDevRegKey и бухаю туда в лоб единственный параметр "AttachedTo", все остальное дописывается туда позже - при установке драйвера. Если я не допишу "AttachedTo", т.е. не пропишу его в реестр и установлю драйвер модема, то модем установится, но в "AttachedTo" будет "набор китайских иероглифов". То бишь он эти иероглифы из какого-то элемента какой-то структуры (который не проинициализирован и поэтому там мусор) откуда-то берет. Опять же, эта билиберда (с дописыванием"AttachedTo" извините через задницу) надежно работает, и в оригинальном примере "с Microsoft", 16055031 , автор использует именно этот кривой на мой взгляд метод. Я довольно много искал поиском по инету, не я первый задаю этот вопрос, но все кто задавали ответа не нашли. '===== Далее, меня немного смущает мой метод получения m_ClassGUID() и цикл с GUID-ами. Т.е. я выясняю к-во GUID-ов для класса "Modem", и при втором вызове SetupDiClassGuidsFromName подсовываю указатель на первый элемент .Data1 первой GUID-структуры Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. В C++ в SetupDiGetClassDevs надо было сразу бы подсунуть GUID_CLASS_MODEM , вернее GUID_DEVINTERFACE_MODEM , думаю так и сделаю через CoCreateGUID. Просто с моим кодом с GUID-массивами я не уверен, что он полностью безупречен в общем случае (т.е. если GUID-ов несколько, то будут ли они корректно заполнены). '===== Ну, и хотелось бы все таки сделать Enum-ератор для портов "Select * from Win32_SerialPort" по WMI (с учетом нестандартных классов и имен), коль скоро эта кухня сейчас в голове. GetDefaultCommConfig- это не Enum-ератор -это просто проверка конкретного порта по принципу сподкнулся/не споткнулся. По идее вот это Device Interface Classes for Serial and Parallel Port Devices , но фишка в том что порты от com0com например находятся не в группе "Порты (COM и LTP)" а создают свою группу (Class, GUID...?) "com0com - serial ports emulators" в диспетчере устройств -при этом WMI->Win32_SerialPort их включает в enum-ерацию, а если я воспользуюсь вышеприведенными Device Interface Classes for Serial and Parallel Port Devices GUID-ами, то я боюсь их не увижу (почти очевидно) - а заранее GUID для com0com подобного эмулятора я в общем случае не знаю (будем так считать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 13:20 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77... меня немного смущает мой метод получения m_ClassGUID() и цикл с GUID-ами. Т.е. я выясняю к-во GUID-ов для класса "Modem", и при втором вызове SetupDiClassGuidsFromName подсовываю указатель на первый элемент .Data1 первой GUID-структуры ...Просто с моим кодом с GUID-массивами я не уверен, что он полностью безупречен в общем случае (т.е. если GUID-ов несколько, то будут ли они корректно заполнены). Ну, здесь (в случае модемов) вроде как проще делается - единым GUID-ом и без GUID-массивов. Правда долго мудохался с SetupDiGetClassDevs пока не доперло перечитать документацию и подставить DIGCF_DEVICEINTERFACE - в предыдущем случае (когда генерировал GUID по имени класса "Modem" этого не требовалось). GUID_DEVINTERFACE_MODEM Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. == А по поводу портов (с учетом нестандартных классов), думаю должен быть какой-то единый GUID, надо в реестре порыться на тему из какой ветки WMI таскает Win32_SerialPort, потому что она их таскает как раз правильно, но не думаю что при этом сильно умничает. Счас WMI-Tools попробую глянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 15:23 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Дас, с портами похоже полный бардак. У меня например на рабочем компе есть: COM1 -обычный COM3, COM4 - PCI-платы железных модемов COM7, COM8 -PCI-плата расширения COM портов CNC и т.п. -виртуальные, части которых правда присвоены нормальные COM# имена Если брать enum-ератор GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR , то видим только COM1 -обычный COM7, COM8 -PCI-плата расширения COM портов (ну собственно они только и сидят в "Порты(COM и LTP)" в диспетчере) Если брать enum-ератор GUID_CLASS_COMPORT , то видим COM1 -обычный COM7, COM8 -PCI-плата расширения COM портов CNC и т.п. -виртуальные, части которых правда присвоены нормальные COM# имена Причем COM3, COM4 - PCI-платы железных модемов -не вижу!!! А с WMI "Select * from Win32_SerialPort" видим: COM1 -обычный COM3, COM4 - PCI-платы железных модемов CNC и т.п. -виртуальные, части которых правда присвоены нормальные COM# имена Причем COM7, COM8 -PCI-плата расширения COM портов -не вижу!!! (ток счас обратил внимание) Получается, что надежно только использовать COM# и перебирать заданный диапазон например COM1-COM100 через GetDefaultCommConfig function. Она по крайней мере дает четкий ответ ЕСТЬ/НЕТ в не зависимости от природы порта. Видимо по этой причине я ее и использовал изначально. Есть еще понятие PortInUse -берется из COMDB - но оно крайне ненадежно по причине того что многие проги/драйвера откровенно следят за собой - т.е. ни проги ни девайса ни драйвера уж нет, а арендованный ею когда-то порт значится как InUse. Чистка делается через вызов GetDefaultCommConfig и при false вызовом ComDBReleasePort. Обычный алгоритм проги которая ищет для себя свободный COM#: вызвать ComDBClaimNextFreePort, после чего использовать возвращаемый номер порта (который эта же ф-ция параллельно метит как InUse). Я поступаю по другому: вывожу список свободных номеров (GetDefaultCommConfig=false), и когда порт выбран для страховки делаю этому порту ComDBReleasePort, чтоб установщик порта не ругался на ошибочное InUse. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 17:16 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77и Enum-ерация делается через GetDefaultCommConfig function -она возвращает false при отсутствии порта...И да, я перебираю, но даже для сотни портов это быстрая процедура. Я ОШИБСЯ. Начал копать и понял что это ДОЛГАЯ процедура. И на 8-ке именно она занимает несколько секунд при опросе а не WMI. maytonМожно сделать... CreateFile("Com"+n,....) и посмотреть коды возврата. Однако ты прав. Очевидно GetDefaultCommConfig использует CreateFile + пытается узнать что-то про порты, что мне не надо. Я воспользовался советом: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Отрабатывает гораздо быстрее чем GetDefaultCommConfig (почти мгновенно). Но если в "опросном диапазоне" есть COM порты, ассоциированные с PCI-модемами (железными), то на них она тормозит еще больше чем GetDefaultCommConfig (GetDefaultCommConfig тормозит и без PCI-модемов). Надо гарантированно составить "список портов" быстро Что можно сделать? М.б. какие флаги в CreateFile поменять? Я использую 0-access (для опроса). Мне надо знать только наличие порта (как состоявшегося в системе девайса). SetupDi... работают мгновенно, но есть проблемы с возвратом ВСЕХ портов как я описал выше. И надо еще копаться, получать их имена и т.п.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 19:42 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Читаю я все эти изыски и не понимаю одной простой вещи ... Если в системе существуют десятки COM-портов, то некто устанавливает реальные железки или делает настройку виртуальных портов. Этот некто непрофессионален настолько, что не может делать свою работу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 21:49 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Некто - это программа. И она это должна делать хорошо и безошибочно (чтоб некто произвольный юзер не парил мозги себе и разработчику). И она это уже 5 лет делает. Но какие-то вещи мне не нравятся (чисто эстетически). Например ожидание в 3-5 сек при выводе списка портов и модемов на них. С модемами я считай доразобрался. Теперь разбираюсь с enum-ератором портов. Есть кстати еще очень быстрый способ прочитать HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM надо смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 22:05 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Например ожидание в 3-5 сек при выводе списка портов и модемов на них. можно подумать модемы какаой-то вредитель постоянно включает и выключает. если других проблем нет - можно и этим заняться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 23:12 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Изопропилможно подумать модемы какаой-то вредитель постоянно включает и выключает. Ну, виртуальный модем включен тогда, когда запущена программа его эмулирующая. Но это отнюдь не означает, что он отсутствует в системе, если эта программа не запущена. Присутствие модема (как и порта) определяется наличием его как устройства (с установленным драйвером естественно). Смысл решаемой задачи вполне понятен. Пользователю надо вывести список checkbox-ов COM1-COMn, при этом надо 1) исключить любые COM-ы занятые и не связанные с прогой (физические COM, железные модемы, usb-шнуры и т.п) 2) проставить в этом списке галки против COM, которые уже задействованы прогой (свои COM прога понятно знает). От пользователя требуется снять/поставить галки против требуемых COM, после чего нажать OK. В зависимости от выбора пользователя прога удаляет/устанавливает СOM-ы. То же с привязанными модемами. Понятно, что тек. карта портов и модемов должна быть выведена безошибочно, чтобы варианты пользовательского выбора исключали ошибки. === Если по сути вопроса (про порты), то похоже самый грамотный метод enum-ерации портов QueryDosDevice function Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Возвращает мгновенно. Ей плевать на то к какому классу относится порт. Она видит порты по имени. Она не пытается влезть в порт как это делают GetDefaultCommConfig и CreateFile, что исключает временные задержки из-за кривости драйверов. Для ответа ЕСТЬ/НЕТ достаточно скормить ей нулевой буфер и получить ERROR_INSUFFICIENT_BUFFER в ответ, что означает наличие девайса по адресу COM#. Похоже я задачу решил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 05:50 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Короче имплементировал в большой проект 3 вещи: 1) Сделал Enum-ерацию портов через QueryDosDevice вместо GetDefaultCommConfig 2) Сделал Enum-ерацию модемов через GUID_DEVINTERFACE_MODEM+SetupDiEnumDeviceInfo вместо WMI 3) Сделал установку драйверов через InstallSelectedDriver вместо UpdateDriverForPlugAndPlayDevices Ну и доволен весьма. Списки выводятся без задержек и драйвера устанавливаются быстрее. Не могу понять следующего. Microsoft рекомендует на >=Vista использовать DiInstallDevice function вместо InstallSelectedDriver function . Речь идет об установке драйвера одного модема (при том что такие же уже могут присутствовать) из указанного INF-файла. Оно мне чего-то даст (скорость установки драйвера и т.п.)? Кроме того что с этим придется отдельно разбираться (тестировать, подключать новые SDK/DDK если C++, бейсик не прокатит для x64), если делать. "Старая" InstallSelectedDriver прекрасно работает везде включая Win 8.1 x64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 01:02 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, поделитесь, пожалуйста, кодом реализации 1-го и 2-го пункта! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 10:16 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
maytonОбычно их в системе не больше четырёх. Можно сделать 4 вызова CreateFile("Com"+n,....) и посмотреть коды возврата.Правильнее так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 10:25 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
rdb_dev, едрит! Я и не заметил, что кто-то воскресил зомби-тред. Некромания какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 10:29 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
rdb_devrdb_dev, едрит!и расщепление Но вообще это скорее всего человек искал решение поиском и задал уточняющий вопрос в ветку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 10:58 |
|
||
|
Как нормальным кодом получить список всех модемов и COM-портов в системе?
|
|||
|---|---|---|---|
|
#18+
inbox129Дмитрий77, поделитесь, пожалуйста, кодом реализации 1-го и 2-го пункта! Ну там же простыня на VB6 приведена. На C+/- будет тоже самое, даже наверно проще, потому как декларации ручками выписывать не надо, нужные .h подключите (какие в MSDN все написано, поиск в google по названиям ф-ций). Ничего больше сказать не могу (такие вещи шаришь, пока в них копаешься), с тех пор этим занимался один раз формально когда переписывал VB6->.Net ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 01:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38656573&tid=2018131]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
165ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 304ms |
| total: | 578ms |

| 0 / 0 |
