SetupDiEnumDeviceInfo

SetupDiEnumDeviceInfo 枚举设备信息

@param ClassGuid 需要获取的设备的Guid,eg显卡:GUID_DEVCLASS_DISPLAY
@param Enumerator 直接赋NULL
@param hwndParent 直接赋NULL
@param Flags 指定标记 ,通常设定为DIGCF_PRESENT
HDEVINFO SetupDiGetClassDevs(IN LPGUID ClassGuid, OPTIONALIN PCTSTR Enumerator, OPTIONAL IN HWND hwndParent, OPTIONALIN DWORD Flags );

Flags:

DIGCF_ALLCLASSES:返回所有设备信息,忽略Guid设置,至于设备的GUID可以通过注册表的Driver字段查看。

DIGCF_DEVICEINTERFACE:返回支持指定设备接口类的设备。如果Enumerators参数制定了设备的实例ID,
						那么必须在Flags参数中设置此标志位。
						

DIGCF_DEFAULT:对于指定的设备接口类,只返回与系统默认设备接口相关联的设备(如果已设置的话)

DIGCF_PRESENT:只返回当前系统中存在的(已连接)设备。

DIGCF_PROFILE:只返回当前硬件列表中的一部分设备。

Guid参考如下

DEFINE_GUID( GUID_DEVCLASS_1394, 0x6BDD1FC1, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
DEFINE_GUID( GUID_DEVCLASS_ADAPTER, 0x4D36E964, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_APMSUPPORT, 0xD45B1C18, 0xC8FA, 0x11D1, 0x9F, 0x77, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
DEFINE_GUID( GUID_DEVCLASS_BATTERY, 0x72631E54, 0x78A4, 0x11D0, 0xBC, 0xF7, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A );
DEFINE_GUID( GUID_DEVCLASS_CDROM, 0x4D36E965, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_COMPUTER, 0x4D36E966, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_DECODER, 0x6BDD1FC2, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
DEFINE_GUID( GUID_DEVCLASS_DISKDRIVE, 0x4D36E967, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_DISPLAY, 0x4D36E968, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_FDC,  0x4D36E969, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_FLOPPYDISK,  0x4D36E980, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_GPS,  0x6BDD1FC3, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
DEFINE_GUID( GUID_DEVCLASS_HDC,  0x4D36E96A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_HIDCLASS, 0x745A17A0, 0x74D3, 0x11D0, 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA );
DEFINE_GUID( GUID_DEVCLASS_IMAGE, 0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
DEFINE_GUID( GUID_DEVCLASS_INFRARED, 0x6BDD1FC5, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
DEFINE_GUID( GUID_DEVCLASS_KEYBOARD, 0x4D36E96B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_LEGACYDRIVER,  0x8ECC055D, 0x047F, 0x11D1, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1 );
DEFINE_GUID( GUID_DEVCLASS_MEDIA, 0x4D36E96C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_MEDIUM_CHANGER,  0xCE5939AE, 0xEBDE, 0x11D0, 0xB1, 0x81, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xC4 );
DEFINE_GUID( GUID_DEVCLASS_MODEM,  0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_MONITOR,  0x4D36E96E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_MOUSE,  0x4D36E96F, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_MTD,  0x4D36E970, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_MULTIFUNCTION,  0x4D36E971, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_MULTIPORTSERIAL,  0x50906CB8, 0xBA12, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
DEFINE_GUID( GUID_DEVCLASS_NET,  0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_NETCLIENT,  0x4D36E973, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_NETSERVICE,  0x4D36E974, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_NETTRANS,  0x4D36E975, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_NODRIVER,  0x4D36E976, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_PCMCIA,  0x4D36E977, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_PORTS,  0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_PRINTER,  0x4D36E979, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_PRINTERUPGRADE,  0x4D36E97A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_SCSIADAPTER,  0x4D36E97B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_SMARTCARDREADER,  0x50DD5230, 0xBA8A, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
DEFINE_GUID( GUID_DEVCLASS_SOUND,  0x4D36E97C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_SYSTEM,  0x4D36E97D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_TAPEDRIVE,  0x6D807884, 0x7D21, 0x11CF, 0x80, 0x1C, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_UNKNOWN,  0x4D36E97E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
DEFINE_GUID( GUID_DEVCLASS_USB,  0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );
DEFINE_GUID( GUID_DEVCLASS_VOLUME,  0x71A27CDD, 0x812A, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );

下面以获取Gpu显卡为例:

eg通过注册表查看 GUID_DEVCLASS_DISPLAY
在这里插入图片描述

std::vector<std::string> gpu_info()
	{
		const auto dev_info = SetupDiGetClassDevs(&GUID_DEVCLASS_DISPLAY, 0, 0, DIGCF_PRESENT);
		for (int i = 0;; i++)
		 {
			SP_DEVINFO_DATA dev_data{ 0 };
			dev_data.cbSize = sizeof(SP_DEVINFO_DATA);
			if (!SetupDiEnumDeviceInfo(dev_info, i, &dev_data))
				break;
			char instance_id[128]{ 0 };
			DWORD require_size = 0;
			SetupDiGetDeviceInstanceIdA(dev_info, &dev_data, instance_id, sizeof(instance_id), &require_size);
			//PCI\VEN_10DE&DEV_1C81&SUBSYS_00007377&REV_A1\4&2D78AB8F&0&0008
			printf("PCI:%s\r\n", instance_id);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值