Я ищу надежный способ перечислить доступные последовательные порты (COM) на машине Windows. Там этот пост об использовании WMI, но мне хотелось бы что-то менее специфичное .NET - я хочу получить список портов в Python или С++, без .NET..
В настоящее время я знаю два других подхода:
-
Чтение информации в разделе реестра
HARDWARE\\DEVICEMAP\\SERIALCOMM
. Это выглядит как отличный вариант, но является ли он надежным? Я не могу найти гарантию онлайн или в MSDN, что эта ячейка реестра действительно содержит полный список доступных портов. -
Попробуйте вызвать
CreateFile
наCOMN
с N числом от 1 до чего-то. Это недостаточно, потому что некоторые COM-порты не называются COMN. Например, некоторые созданные виртуальные COM-порты называются CSNA0, CSNB0 и т.д., Поэтому я не буду полагаться на этот метод.
Любые другие методы/идеи/опыт для совместного использования?
Изменить:, кстати, здесь простая реализация Python для чтения имен портов из реестра:
import _winreg as winreg
import itertools
def enumerate_serial_ports():
""" Uses the Win32 registry to return a iterator of serial
(COM) ports existing on this computer.
"""
path = 'HARDWARE\\DEVICEMAP\\SERIALCOMM'
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
except WindowsError:
raise IterationError
for i in itertools.count():
try:
val = winreg.EnumValue(key, i)
yield (str(val[1]), str(val[0]))
except EnvironmentError:
break