我是否可以检查COM端口是否可以在没有实际打开的情况下打开?

时间:2009-06-04 15:43:50

标签: winapi serial-port

通常,在PC上,有一些非标准的COM端口可供终端仿真器使用。我希望能够扫描COM1-COM32端口,看看哪些端口(如果有的话)可以作为串口打开。我可以这样做,只需在所有这些端口上调用CreateFile();然而,我实际上必须暂时打开/关闭(并影响DTR / RTS)端口。

我想为可用端口的用户提供准确的列表。问题是我不想影响当前未使用的端口的DTR / RTS线路,因为可能有硬件连接到那些不希望在DTR / RTS上看到任何转换的端口。

有没有办法只问一个问题:“CreateFile()会成功吗?”在指定的COM端口?

3 个答案:

答案 0 :(得分:2)

不,没有办法提出这样的问题。无论如何,答案都没有意义。即使操作系统确定打开COM端口会在某个时间点成功,但这并不意味着您可以稍后再打开它。 (例如,它可能会被另一个应用程序打开。)您可以使用SetupDiXXX函数枚举系统中的COM端口,但这实际上只返回有关已安装和活动驱动程序的信息。除此之外,它不提供任何保证。

答案 1 :(得分:1)

几种方式

a)QueryDosDevice() - 在名称

中检查COM

b)GetDefaultCommConfig() - 通过所有可能的序列名称,例如。尝试获取COM1,COM2,... COMn的配置

c)HKLM / HARDWARE / DEVICEMAP / SERIALCOMM - 枚举密钥

d)SetupAPI - 如果我记得如何使用它而不广泛参考参考手册我不会是人类

e)???

编辑:如Peter所述,除了枚举之外,没有任何功能可以告诉您是否可以访问该设备。

答案 2 :(得分:0)

HKLM / HARDWARE / DEVICEMAP / SERIALCOMM是我的最爱。

此解决方案显示了最佳的易用性与准确率IMO。

在大多数情况下这已经足够准确,尽管我已经看到至少有一家USB到串口的制造商,其HW并不总是在那里列出(FTDI IIRC)。