举一个实际例子,用SetupDiGetClassDevs获取注册表的所有串口
时间: 2024-03-16 13:43:36 浏览: 301
好的,您可以参考以下示例代码:
```c++
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#include <stdio.h>
int main() {
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
// 创建一个设备信息集合,用于获取串口设备的信息
hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE) {
printf("SetupDiGetClassDevs failed: %x\n", GetLastError());
return 1;
}
// 枚举设备信息集合中的所有设备
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) {
DWORD DataT;
char buf[MAX_PATH];
DWORD len = 0;
// 获取设备的友好名称
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buf, sizeof(buf), &len)) {
printf("FriendlyName: %s\n", buf);
}
// 获取设备的端口名称
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_PORTNAME, &DataT, (PBYTE)buf, sizeof(buf), &len)) {
printf("PortName: %s\n", buf);
}
}
// 释放设备信息集合
SetupDiDestroyDeviceInfoList(hDevInfo);
return 0;
}
```
这段代码使用 `SetupDiGetClassDevs` 函数创建了一个设备信息集合,用于获取串口设备的信息。然后使用 `SetupDiEnumDeviceInfo` 函数枚举设备信息集合中的所有设备,并通过 `SetupDiGetDeviceRegistryProperty` 函数获取设备的友好名称和端口名称。最后使用 `SetupDiDestroyDeviceInfoList` 函数释放设备信息集合。
阅读全文