Sto cercando un modo efficace per elencare le porte seriali (COM) disponibili su una macchina Windows. C'è this post about using WMI, ma vorrei qualcosa di meno specifico per .NET. Voglio ottenere l'elenco delle porte in un programma Python o C++, senza .NET.Elenco porte seriali (COM) su Windows?
Io attualmente a conoscenza di altri due approcci:
Leggere le informazioni nella chiave
HARDWARE\\DEVICEMAP\\SERIALCOMM
Registro di sistema. Questa sembra un'ottima opzione, ma è robusto? Non riesco a trovare una garanzia online o in MSDN che questa cella di registro in effetti detenga sempre l'elenco completo delle porte disponibili.Tryint per chiamare
CreateFile
suCOMN
con N un numero da 1 a qualcosa. Questo non è abbastanza buono, perché alcune porte COM non sono denominate COMN. Ad esempio, alcune porte COM virtuali create sono denominate CSNA0, CSNB0 e così via, quindi non fare affidamento su questo metodo.
Altri metodi/idee/esperienze da condividere?
Edit: a proposito, ecco una semplice implementazione di Python di leggere i nomi delle porte dal Registro di sistema: sono disponibili
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
Grande! Funziona molto bene – luc
Sembra molto utile per trovare le porte COM - Ho intenzione di provare a usarlo per trovare la porta Arduino – SimpleSi