#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#pragma comment(lib, "setupapi")
void GetDeviceInfo()
{
//得到设备信息集
HDEVINFO hDevInfo = SetupDiGetClassDevs(
(LPGUID)&GUID_DEVCLASS_DISPLAY,
NULL,
0,
DIGCF_PRESENT);
//DIGCF_PRESENT - 只返回当前存在的设备。
//DIGCF_ALLCLASSES - 返回所有已安装的设备。如果这个标志设置了,ClassGuid参数将被忽略。
//DIGCF_PROFILE - 只返回当前硬件配置文件中的设备。
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("Error! SetupDiGetClassDevs() return %d\n", GetLastError());
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}
TCHAR szBuf[MAX_PATH];
SP_DEVINFO_DATA spDevInfoData = { sizeof(SP_DEVINFO_DATA) };
// 开始列举设备
for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
{
// 得到设备类描述
if (SetupDiGetClassDescription(
&spDevInfoData.ClassGuid,
szBuf,
MAX_PATH,
NULL))
{
printf("\n%03d : ClassDescription = %s\n", i, szBuf);
}
// 得到设备实例的唯一标识ID(由注册表路径组成)
if (SetupDiGetDeviceInstanceId(
hDevInfo,
&spDevInfoData,
szBuf,
MAX_PATH,
NULL))
{
printf("%03d : InstanceId = %s\n", i, szBuf);
}
// 得到设备名称
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_DEVICEDESC,
NULL,
(PBYTE)szBuf,
MAX_PATH,
NULL))
{
MessageBox(NULL, szBuf, 0, MB_OK);
printf("%03d : DeviceDesc = %s\n", i, szBuf);
}
// 得到设备型号
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_FRIENDLYNAME,
NULL,
(PBYTE)szBuf,
MAX_PATH,
NULL))
{
printf("%03d : FriendName = %s\n", i, szBuf);
}
// 得到设备在注册表中的子路径
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_DRIVER,
NULL,
(PBYTE)szBuf,
MAX_PATH,
NULL))
{
printf("%03d : Regedit Path = %s\n", i, szBuf);
}
}
//printf("\nCdrom count = %d\n", i);
getchar();
return;
}
/*
GUID_DEVCLASS_FDC软盘控制器
GUID_DEVCLASS_DISPLAY显示卡
GUID_DEVCLASS_CDROM光驱
GUID_DEVCLASS_KEYBOARD键盘
GUID_DEVCLASS_COMPUTER计算机
GUID_DEVCLASS_SYSTEM系统
GUID_DEVCLASS_DISKDRIVE磁盘驱动器
GUID_DEVCLASS_MEDIA声音、视频和游戏控制器
GUID_DEVCLASS_MODEMMODEM
GUID_DEVCLASS_MOUSE鼠标和其他指针设备
GUID_DEVCLASS_NET网络设备器
GUID_DEVCLASS_USB通用串行总线控制器
GUID_DEVCLASS_FLOPPYDISK软盘驱动器
GUID_DEVCLASS_UNKNOWN未知设备
GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器
GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器
GUID_DEVCLASS_PORTS端口(COM 和 LPT)
GUID_DEVCLASS_MONITOR监视器
*/