我正在寻找一种强大的方法来列出Windows机器上可用的串行(COM)端口.这篇关于使用WMI的帖子,但我想要一些特定于.NET的东西 - 我想在没有.NET的情况下获得Python或C++程序中的端口列表.
我目前知道另外两种方法:
读取HARDWARE\\DEVICEMAP\\SERIALCOMM
注册表项中的信息.这看起来是一个很好的选择,但它是否健壮?我无法在线或在MSDN中找到此注册表单元确实始终包含可用端口的完整列表的保证.
Tryint调用CreateFile
上COMN
1有N多家的东西.这还不够好,因为某些COM端口未命名为COMN.例如,创建的一些虚拟COM端口名为CSNA0,CSNB0等,因此我不会依赖此方法.
分享任何其他方法/想法/经验?
编辑:顺便说一句,这是一个从注册表中读取端口名称的简单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
Run Code Online (Sandbox Code Playgroud) 继这个问题和这一次,我问最近,但没有正确的细节......,最后这一次,我在自由帕斯卡论坛问具体....
任何人都可以向我提供指导,示例或某个地方的链接,解释如何使用Free Pascal调用物理连接的硬盘列表,或者,无论如何,Delphi,无论磁盘是否已由操作系统安装或不?我想要实现的屏幕截图中显示了一个示例(此屏幕截图中显示的是另一个软件产品).因此,拉出逻辑卷列表(C:\,E:\ etc)并不是我想要做的.如果磁盘有一个操作系统无法挂载的文件系统,我仍然希望看到列出的物理磁盘.
我强调C\C++\C夏普的例子很丰富,但不是我追求的.我主要需要Free Pascal示例,或者说,失败了,Delphi.