是否可以枚举/扫描可用的USB端口与Boost Asio c++库



我想使用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 portn", i);
port.close();
}
}
catch (...) {
printf("Port COM%i is not a possible USB portn", i);
}

}

return 0;
}

这不是标准库的特性。

由于您正在寻找windows,请考虑使用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);
}

最新更新