我们在用setupapi的时候,总是要用到设备的GUID,但是如果得到GUID确实费率不少功夫。通过这一段的摸索,总结了一下的方法。 方法一: 通过注册表的相关键值来找到相应设备的GUID。 找到下面的键值,我们可以看到里面有很多的自建。其名字就是设备的guid。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class 如下就是串口的GUID {4D36E978-E325-11CE-BFC1-08002BE10318} Modem的GUID如下: {4D36E96D-E325-11CE-BFC1-08002BE10318} 如何应用到setup系列的函数里面去呢?我们只需转换下结构就可以了 Modem的GUID转换成如下的结构。 GUID ClassGuid = {0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}; 同理串口的GUID如下: GUID ClassGuid = {0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}; 然后就可以用如下函数,来建立相关的设备信息了。 hDevInfoSetClass = SetupDiGetClassDevs(&ClassGuid, NULL, NULL, DIGCF_PRESENT |DIGCF_PROFILE );
方法二: 直接利用文件#include <devguid.h>里面的设备的类型定义。 文件devguid.h里面定义了相关的设备的类型GUID,如下:
DEFINE_GUID( GUID_DEVCLASS_1394, 0x6bdd1fc1L, 0x810f, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f ); DEFINE_GUID( GUID_DEVCLASS_ADAPTER, 0x4d36e964L, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_CDROM, 0x4d36e965L, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 ); …. GUID ClassGuid = GUID_DEVCLASS_CDROM;// 光驱的GUID
注意:如果出现编译错误,请包含以下同文件 #include <objbase.h> #include <devguid.h> (renjwjx) |