C++ 获取COM设备的描述

C++ 获取COM设备的描述,c++,visual-c++,serial-port,C++,Visual C++,Serial Port,我已经读了很多关于这方面的帖子,但都是用C或MFC写的。我使用的是普通的windows库,而不是MFC共享库或ATL 我可以很容易地枚举可用的COM端口,但我不知道如何获得描述,例如,在Windows的设备管理器中看到的描述。我一直在阅读MSDN,最近的一次是SetupDiGetDeviceRegistryProperty,但我想一定有一种快速的方法可以做到这一点。我还发现Qt有QextSerialEnumerator::getPorts,但因为我没有使用Qt,所以我希望WinAPI也能提供类似

我已经读了很多关于这方面的帖子,但都是用C或MFC写的。我使用的是普通的windows库,而不是MFC共享库或ATL

我可以很容易地枚举可用的COM端口,但我不知道如何获得描述,例如,在Windows的设备管理器中看到的描述。我一直在阅读MSDN,最近的一次是SetupDiGetDeviceRegistryProperty,但我想一定有一种快速的方法可以做到这一点。我还发现Qt有QextSerialEnumerator::getPorts,但因为我没有使用Qt,所以我希望WinAPI也能提供类似的功能


如果有人有这样做的片段,我们将不胜感激。

首先,您真正需要什么样的描述?您可以通过EnumPorts和Registry的方式获取有关COM端口的不同信息。例如,注册表方式将显示虚拟COM端口-这是EnumPorts无法做到的。
第二件事-枚举COM端口有9种不同的方法。它们的用法示例如下-我在项目中使用了一些代码。另外,请注意,作者使用了许多msvc特有的功能—atl容器用于内存分配等。

我所能说的是,如果您不确切知道自己在做什么,请不要使用setupDI WDM函数,这对我来说是一种倒退,但请检查windows DDK示例,我认为您在设备管理器中看到的dll实现位于/ports中

问题是串行端口非常古老,所以它们被拖了很久,并被黑客入侵到windows 7中,因此,例如,当您更改COM端口时,您必须写入win.ini,但win.ini不存在wtf我听到您说,这是因为任何更改都会反弹到注册表中


无论如何,祝你好运。

我希望这能帮助你谢谢你,但我不会用C或任何.NET来做这件事。我知道C有一些非常简化且易于使用的静态类用于端口描述和所有其他信息,但我不能使用这些静态类,因为我没有使用这种语言。快速方法是SetupDiGetDeviceRegistryProperty,带有SPDRP_FRIENDLYNAME属性。我已经看过enumser中的代码,但它确实是MSVC特有的ATL,就像你说的。我希望它是您在设备管理器中检查任何设备的属性并查看描述时看到的描述。例如,对于我的arduino,它说的是arduino UNO。我也在注册表中查找过,但这会说//device/bla,而不是设备的描述。ATL容器通常只用于内存分配。我成功地用new替换了它们,因为我不太喜欢使用ATL。registry-way可以获得有关注册表项的全部信息,您可以在regedit中看到这些信息。我真的不知道如何获得arduino名称,但我确切地知道,在减少为COM ID的方法的枚举器输出中。如果您稍微修改一下枚举器,您将得到所需的名称。我已从注册表中获得名称,但这不是设备管理器中的名称。我已经研究enumser有一段时间了,但它确实依赖于MFC类。是的,我一直在阅读它,实际上,它似乎有点像这个问题。但是,对于我试图实现的简化串行端口通信库,我需要它们的属性。基本上,我试图建立一个com设备的列表,包括描述,这样用户就可以从下拉菜单中选择一个。