Список последовательных (COM) портов в Windows?
Я ищу надежный способ составления списка доступных последовательных (COM) портов на компьютере с Windows. Там & APOS; sэтот пост об использовании WMI, но я хотел бы что-то менее специфичное .NET - я хочу получить список портов в программе на Python или C ++, без .NET.
В настоящее время я знаю о двух других подходах:
Reading the information in the HARDWARE\\DEVICEMAP\\SERIALCOMM
registry key. This looks like a great option, but is it robust? I can't find a guarantee online or in MSDN that this registry cell indeed always holds the full list of available ports.
Tryint to call CreateFile
on COMN
with N a number from 1 to something. This isn't good enough, because some COM ports aren't named COMN. For example, some virtual COM ports created are named CSNA0, CSNB0, and so on, so I wouldn't rely on this method.
Любые другие методы / идеи / опыт, чтобы поделиться?
Edit: Кстати, вот простая реализация 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