枚举 Pocket PC 上的串行端口






3.56/5 (4投票s)
用于枚举 Pocket PC COM 端口的 C++ 类

引言
由于 Pocket PC 注册表与 PC 操作系统中的注册表不同,因此在 Pocket PC 设备上获取可用端口的信息比较麻烦。关于如何在 Pocket PC 上执行此操作的信息很少,而且经常无法正常工作。例如,此处发布的代码建议通过查找“HKEY_LOCAL_MACHINE\\Comm\\IrDA”来检测 IrDA 端口,但这在 Pocket PC 2002 和 Pocket PC 2003 上不起作用。
本文介绍 CCOMEnum
类,作为克服这些问题的尝试。
背景
CCOMEnum
类通过解析“HKEY_LOCAL_MACHINE\\Drivers\\Active”内容来查找所有可用的 COM 端口。所有找到的端口和相关数据都存储在结构体中。该类提供了一种通过获取句柄来限定找到的端口的选项。限定将减少找到的端口数量。为什么不总是进行限定?一个例子 - USB 端口。它在 Pocket PC 上是从设备。因此,在启用限定时,它不会显示出来。
Using the Code
通过调用 EnumerateCOMs()
函数完成 COM 端口枚举
virtual void EnumerateCOMs(BOOL Verify);
Verify
参数将控制是否通过获取其句柄来验证端口。调用 EnumerateCOMs()
后,可以使用其他成员函数来查看数据。GetTotalComs()
将返回找到的端口数量。此数字可以在 for
循环或 if
语句中用于从 CCOMEnum
类读取数据时
#include "CCOMEnum.h"
CCOMEnum Enumerator;
UINT i;
CString portName;
CString portKey;
int portIndex;
Enumerator.EnumerateCOMs(FALSE);
i = 2;
for(i=0; i < Enumerator.GetTotalComs(); i++)
{
if(Enumerator.GetPortSimpleKey(i) == "Serial2")
{
portName = Enumerator.GetPortName(i); // "COM2:"
portKey = Enumerator.GetPortKey(i); //
portIndex = Enumerator.GetPortIndex(i); // Such as 2
}
}
GetPortSimpleKey()
和 GetPortKey()
返回 CString
值,可用于根据功能对端口进行排序。
历史
当前版本为 1.0。虽然此代码将在此处定期更新,但有关最新代码,请查看开发人员的网站 http://www.advatronix.com/。在那里,您还可以下载预构建的可执行文件。