Listagem de portas seriais (COM) no Windows?
Eu estou procurando uma maneira robusta de listar as portas serial (COM) disponíveis em uma máquina Windows. Háeste post sobre o uso do WMI, mas gostaria de algo menos específico do .NET - eu quero obter a lista de portas em um programa de Python ou C ++, sem o .NET.
Atualmente conheço outras duas abordagens:
Lendo as informações noHARDWARE\\DEVICEMAP\\SERIALCOMM
Chave do registro. Isso parece uma ótima opção, mas érobusto? Eu não consigo encontrar uma garantia on-line ou no MSDN que esta célula do registro, na verdade, sempre mantém a lista completa de portas disponíveis.
Tryint para ligarCreateFile
emCOMN
com N um número de 1 a alguma coisa. Isso não é bom o suficiente, porque algumas portas COM não são nomeadas COMN. Por exemplo, algumas portas virtuais criadas são chamadas CSNA0, CSNB0 e assim por diante, então eu não confiaria nesse método.
Quaisquer outros métodos / ideias / experiências para compartilhar?
Editar: A propósito, aqui está uma implementação Python simples de ler os nomes de portas do registro:
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