C - 获取特定设备的COM端口号

C - 获取特定设备的COM端口号

问题描述:

有没有办法自动检测到我的设备连接到Windows上的哪个COM端口?这是一个特定的设备,所以我知道它的名字或我需要的任何东西。C - 获取特定设备的COM端口号

现在我有一个C程序,在这里我必须在控制台如输入COM端口号:

printf("COM port number?\n"); 
scanf("%d",&port_no); 
do_stuff_with_COM_port(port_no); 

很是烦人在Windows设备管理器来检查,每次我的设备连接到我这号希望我的程序自动检测端口号。我怎样才能做到这一点?

谢谢。

机器上的每个物理端口都有一个不会更改的号码。因此,如果每次不需要此设备时将设备连接到相同的端口上。

但是,如果你可以更改端口每次,可能工作的解决方案是:

  1. 尝试打开COM 1

    • 如果你有一个错误,端口已经被人打开否则,进入第3步
    • 如果端口不开放,将第2步
  2. 尝试发送将被您的设备识别的消息

    • 如果您收到预期的答案,那么您知道这是正确的端口。
    • 如果你没有收到任何东西(或什么废话),你知道这不是正确的COM端口。
  3. 移动到下一个可用的COM端口和重复,直到你找到它,或者你列举所有的COM端口
+0

几乎:)注意,因为另一个进程已经打开它打开的端口可能会失败,(在这种情况下,继续尝试下一个端口,步骤5)。 –

+0

另一个变体是为每个端口创建一个单独的处理程序线程。发现设备成功打开并进行投票的设备获胜,其他设备将自行终止。如果串口处理已经关闭,(通常情况下),那么这可能会更容易,肯定会更快:) –

+0

@MartinJames更新了我的答案。多线程确实是一个好主意。 –