我有一个通过USB连接的GSM调制解调器.调制解调器创建2个串行端口.第一个自动连接到调制解调器,第二个在设备管理器中显示为"HUAWEI Mobile Connect - 3G PC UI界面(COM6)"
第二个端口用于从调制解调器获取重要信息,例如信号质量; 发送和接收短信; 以及许多其他功能.
我正在编写一个应用程序,它将包含第二个端口提供的一些功能.我需要的是确定哪个COM端口是备用端口的确定的火灾方法.迭代端口并检查对"ATE0"的响应是不够的.调制解调器的端口通常是编号较小的端口,当拨号连接未激活时,它将响应"ATE0"与第二个端口相同.
我想要做的是迭代端口并检查它们的友好名称,如设备管理器中所示.这样我就可以将应用程序中的端口链接到设备管理器中标记为"HUAWEI Mobile Connect - 3G PC UI Interface(COM6)"的端口.我还没有找到任何可以让我以编程方式获得该名称的信息.
很久以前我为客户写了一个实用工具来做这个,但是对于GPS而不是调制解调器.
我刚刚看过它,跳出来可能有用的位是:
GUID guid = GUID_DEVCLASS_PORTS; SP_DEVICE_INTERFACE_DATA interfaceData; ZeroMemory(&interfaceData, sizeof(interfaceData)); interfaceData.cbSize = sizeof(interfaceData); SP_DEVINFO_DATA devInfoData; ZeroMemory(&devInfoData, sizeof(devInfoData)); devInfoData.cbSize = sizeof(devInfoData); if(SetupDiEnumDeviceInfo( hDeviceInfo, // Our device tree nDevice, // The member to look for &devInfoData )) { DWORD regDataType; BYTE hardwareId[300]; if(SetupDiGetDeviceRegistryProperty(hDeviceInfo, &devInfoData, SPDRP_HARDWAREID, ®DataType, hardwareId, sizeof(hardwareId), NULL)) { ...
(你在循环中调用这个位并增加nDevice)
然后
BYTE friendlyName[300]; if(SetupDiGetDeviceRegistryProperty(hDeviceInfo, &devInfoData, SPDRP_FRIENDLYNAME, NULL, friendlyName, sizeof(friendlyName), NULL)) { strFriendlyNames += (LPCTSTR)friendlyName; strFriendlyNames += '\n'; }
找到设备的名称.
希望这能帮助您朝着正确的方向前进.