65.9K
CodeProject 正在变化。 阅读更多。
Home

枚举 Pocket PC 上的串行端口

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.56/5 (4投票s)

2005年12月10日

CPOL

1分钟阅读

viewsIcon

50499

downloadIcon

661

用于枚举 Pocket PC COM 端口的 C++ 类

Sample Image - COMEnum.gif

引言

由于 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/。在那里,您还可以下载预构建的可执行文件。

© . All rights reserved.