有几种方法可以在Windows下列出串行端口,但我不确定哪种方法是正确的:检测所有可用串行端口的方法。
一个很好的代码示例是http://www.naughter.com/enumser.html-其中有9种(九种!)枚举串行设备的方法。
问题是:什么是最佳的做法。
要求:
- 不打开端口以检查它们是否可用。
- 以便能够检测具有不同于
COMx
的名称的端口。 - 在Windows XP SP2或更高版本上工作
有几种方法可以在Windows下列出串行端口,但我不确定哪种方法是正确的:检测所有可用串行端口的方法。
一个很好的代码示例是http://www.naughter.com/enumser.html-其中有9种(九种!)枚举串行设备的方法。
问题是:什么是最佳的做法。
要求:
COMx
的名称的端口。
8条答案
按热度按时间pjngdqdw1#
字符串
ccrfmcuu2#
修改了@Dženan答案以使用宽字符并返回int列表
字符串
fcipmucu3#
如果您可以访问注册表,则
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
项包含Windows当前支持的COM端口列表(在某些情况下,此信息可能过时/不正确;例如,我怀疑提供串行端口的即插即用设备尚未完成检测/安装或最近已被删除)。这是.NET Framework的
SerialPort.GetPortNames()
方法报告可用COM端口的方式,并且上述信息是从链接页派生的。eoxn13cs4#
这是@michael-jacob-mathew的现代版回答:
字符串
它在我的计算机上生成以下输出:
型
mxg2im7a5#
串行端口是非常简单的设备,可以追溯到计算硬件的石器时代。它们不支持即插即用,没有办法知道有人插入了设备。您唯一能做的就是发现哪些端口可用,SerialPort.GetPortNames()返回列表。一些USB模拟器可以生成一个描述性名称来搭配端口名,您可以使用WMI发现那些端口。Win32_SerialPort类别。
这些都不能帮助你发现哪个COM端口连接到了一个特定的设备上。只有一个人知道,她实际上把电缆插入了连接器。你需要提供一个配置UI,让用户选择端口号。一个组合框完成了这项工作。在你的配置数据中保存选择,很可能在你的程序下次启动时,该设备仍然连接到同一个端口。
hc8w905p6#
枚举COM端口的正确方法是使用SetupDi函数。尝试使用SetupFile()打开COM端口对于多达256个端口名称来说太慢,并且会跳过已经打开的端口。
对于Windows,所有串行端口都有一个与“COM%u”匹配的别名。当然!从Windows 98开始,就提供了必要的SetupDi函数集,因此您的软件可以保持相当高的向后兼容性级别。只有在需要DOS或Windows < 98时,打开枚举才是可以的,而且速度很快,因为这些系统只支持COM 4。
这里有一个填充ComboBoxEx的例子:
字符串
x1c 0d1x的数据
ohtdti5x7#
您可以检查Windows注册表库以列出所有COM端口。
ybzsozfc8#
字符串