Estoy buscando una manera robusta para listar los puertos serie (COM) disponibles en una máquina Windows. Hay this post about using WMI, pero me gustaría algo menos específico .NET - Quiero obtener la lista de puertos en un programa C++ o Python, sin .NET.Listado de puertos serie (COM) en Windows?
Actualmente me conocerán otros dos enfoques:
La lectura de la información en la clave
HARDWARE\\DEVICEMAP\\SERIALCOMM
registro. Esto parece ser una gran opción, pero ¿es robusta? No puedo encontrar una garantía en línea o en MSDN de que esta celda de registro siempre contenga la lista completa de puertos disponibles.Tryint para llamar a
CreateFile
enCOMN
con N un número de 1 a algo. Esto no es lo suficientemente bueno, porque algunos puertos COM no se llaman COMN. Por ejemplo, algunos puertos COM virtuales creados se llaman CSNA0, CSNB0, etc., así que no confiaría en este método.
¿Algún otro método/ideas/experiencia para compartir?
Editar: por cierto, he aquí una sencilla implementación de Python de la lectura de los nombres de los puertos de 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
Genial! Funciona muy bien – luc
Parece muy útil para encontrar puertos de comunicación: voy a tratar de usarlo para encontrar el puerto Arduino – SimpleSi