Windows Mobile 上的串行端口枚举






3.88/5 (11投票s)
如何在 Windows Mobile 设备上枚举串口(包括由 Microsoft Bluetooth 堆栈创建的虚拟端口)。
引言
本文简要介绍了一种用于 Windows Mobile 设备的串口枚举方法,该方法包括 Microsoft Bluetooth 堆栈的虚拟 COM 端口。
背景
我最近被要求编写一个小型的用户界面,用于枚举 Windows Mobile 设备上的所有 COM 端口,并在可能的情况下提供有关连接设备的简短描述。 在 CodeProject 上查找解决方案后,我在 Joaquín 的 文章 中找到了一种非常有希望的方法。 我通过枚举 HKEY_LOCAL_MACHINE\Drivers\Active
下的所有键,采用了类似的方法,但发现了一个大问题:在安装了 Microsoft Bluetooth 堆栈的设备上,虚拟 COM 端口未在此键下列出。 有趣的是,Widcomm Bluetooth 堆栈似乎可以正确处理这个问题。
上图显示了运行示例应用程序的两个 Windows Mobile 设备。 在右侧,您可以看到带有 Widcomm Bluetooth 堆栈的 WM6 Asus P535 的屏幕截图。 所有枚举的端口都来自我上面提到的活动驱动程序注册表键。 在左侧,您可以看到带有 Microsoft Bluetooth 堆栈的 WM5 i-mate K-Jam 设备。 为了检索有关 COM6:
端口的信息,我不得不查看注册表中的其他位置,即 Software\Microsoft\Bluetooth\Serial\Ports
键下。
使用代码
使用串口枚举代码非常简单。 首先声明一个 CSerialPortEnum
类型的对象
CSerialPortEnum portEnum;
现在,我们准备好枚举串口了
size_t i;
int iItem = 0;
for(i = 0; i < portEnum.GetCount(); ++i)
{
const CSerialPortInfo *pInfo = portEnum[i];
if(pInfo != NULL)
{
iItem = listPort.AddItem(iItem, 0, pInfo->GetPortName());
listPort.SetItemText(iItem, 1, pInfo->GetDescription());
}
}
请注意,枚举对象不会按 COM 端口号对列表进行排序。 如果您需要重用该对象再次枚举串口,只需调用 EnumeratePorts
函数即可。
另请注意,此代码仅在 Windows Mobile 5 和 6 设备(Pocket PC)上进行了测试。
历史
- 2007-11-29 - CodeProject 首次发布。