Szukam solidnego sposobu na listę dostępnych portów szeregowych (COM) na komputerze z systemem Windows. Jest this post about using WMI, ale chciałbym coś mniej .NET specyficzne - Chcę uzyskać listę portów w programie Python lub C++, bez .NET.Wyświetlanie portów szeregowych (COM) w systemie Windows?
Obecnie wiadomo o dwóch innych metod:
Odczytywanie informacji w kluczu
HARDWARE\\DEVICEMAP\\SERIALCOMM
rejestru. To wygląda na doskonałą opcję, ale czy jest to solidna? Nie mogę znaleźć gwarancji online lub w MSDN, że ta komórka rejestru rzeczywiście zawsze posiada pełną listę dostępnych portów.Tryint wywoływania
CreateFile
naCOMN
z N liczbą od 1 do czegoś. To nie jest wystarczająco dobre, ponieważ niektóre porty COM nie mają nazwy COMN. Na przykład niektóre wirtualne porty COM są nazywane CSNA0, CSNB0 itd., Więc nie będę polegać na tej metodzie.
Jakieś inne metody/pomysły/doświadczenia do udostępnienia?
Edit: przy okazji, oto prosta implementacja Pythona czytania nazwy portów z rejestru: Dostępne są
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
Świetnie! Działa bardzo dobrze. – luc
Wygląda bardzo przydatny do znalezienia portów COM - spróbuję użyć go do znalezienia portu Arduino – SimpleSi