枚举串口 - W2K 风格。






4.56/5 (9投票s)
2002 年 7 月 21 日
1分钟阅读

223767

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*/);