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

枚举串口 - W2K 风格。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (9投票s)

2002 年 7 月 21 日

1分钟阅读

viewsIcon

223767

downloadIcon

7648

使用 Win2K 及更高版本随附的 SetupDi* API 枚举串行端口。

引言

你可能会认为确定 Windows PC 上存在的串口是一项简单的任务。这似乎是操作系统应该支持的一个合理的功能。不幸的是,在 Win2K 之前,根本没有对此进行支持(除非你自己读取注册表),即使在那之后,API 也有些繁琐。

附带的串口枚举代码首先确定它正在运行的操作系统,然后运行适当的例程来枚举串口。在 Win 9x(和 Me)中,它使用注册表。在 W2K 及更高版本中,它使用包含在该版本的 WinSDK 中的 SetupAPI。它还支持在 NT4 下“暴力”枚举串口。

不幸的是,我静态链接了 setupapi.lib,因此提供的可执行文件实际上无法在 95 和 nt4 下运行(我实际上不需要为我的应用程序支持这些操作系统)。如果需要,可以通过使用 LoadLibrary 进行动态绑定来解决这个问题。

要使用 EnumSerial 代码,只需在项目中包含 EnumSerial.cpp 和 .h,并在 win32 sdk 中链接 setupapi.lib(这在 Visual Studio 的项目链接设置中的“附加依赖项”下)。

现在你只需要在源代码中包含 "EnumSerial.h",分配一个空的 CArray,其中包含 SSerInfo 结构体,并调用 EnumSerialPorts。它将用填充的 SSerInfo 结构体填充你的数组,其中包含以下信息

CString strDevPath;      // Device path for use with CreateFile()
CString strPortName;     // Simple name (i.e. COM1)
CString strFriendlyName; // Full name to be displayed to a user
BOOL bUsbDevice;         // Provided through a USB connection?
CString strPortDesc;     // friendly name without the COMx

示例

CArray<SSerInfo,SSerInfo&> asi;
EnumSerialPorts(asi,FALSE/*include all*/);
© . All rights reserved.