windows 是否可以使用Boost Asio C++库枚举/扫描可用的USB端口

b09cbbtk  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(128)

我想使用Boost Asio库来连接我的USB设备。它工作正常。现在我想枚举/扫描所有可能的USB设备,看看哪一个可以使用。这在Boost Asio库中可能吗?我还没有找到任何功能或相关信息。
这是最封闭的情况下找到USB端口。但不确定这是否是一个适当的解决方案。

#include <stdio.h>
#include <boost/asio.hpp>

int main()
{
    boost::asio::io_service io;
    boost::asio::serial_port port(io);

    char portName[10];
    for (int i = 0; i < 256; i++) {
        try {
            sprintf_s(portName, "COM%i", i);
            port.open(portName);
            if (port.is_open()) {
                printf("Port COM%i is a possible USB port\n", i);
                port.close();
            }
        }
        catch (...) {
            printf("Port COM%i is not a possible USB port\n", i);
        }
        
    }

    return 0;
}
of1yzvn4

of1yzvn41#

这不是图书馆的特色。
由于您正在寻找窗口,请考虑使用WMI接口来枚举串行端口。例如,在C#代码中:

try
{
    ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\WMI",
        "SELECT * FROM MSSerial_PortName");

    foreach (ManagementObject queryObj in searcher.Get())
    {
        Console.WriteLine("InstanceName: {0}", queryObj["InstanceName"]);
        Console.WriteLine("PortName: {0}", queryObj["PortName"]);
    }
}
catch (ManagementException e)
{
    MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}

相关问题