如何获得系统硬件的信息,就像【系统】中【设备列表】中一样? 用SetupDiBuildClassInfoList获得GUID列表,但查里面的信息却只有一个类中有内容。用其它人发表的列存储设备的函数可以列出存储设备,其它设备怎样列呀,CPU、RAM、网卡... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 读xpddk下的src目录下的enable例子。 查GUID要在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class项目中有的GUID刚好给你一段我的枚举代码,枚举出来的信息会填充入HDEVINFO中,可以传到DDK的StateChange函数中处理 TCHAR * GUIDString = NULL; GUID guid; ZeroMemory(&guid, sizeof(GUID)); switch(nIndex) { case 0: // 0 代表软驱 if(1 == nStatus){ ChangeDeviceStatus(cDeviceStatus&(~DISFLOPPY));//为启用置位 } if(0 == nStatus){ ChangeDeviceStatus(cDeviceStatus|DISFLOPPY);//禁用 } GUIDString = _T("4D36E980-E325-11CE-BFC1-08002BE10318"); UuidFromString((unsigned char *)GUIDString, &guid); break; case 1: // 1 代表光驱 if(1 == nStatus){ ChangeDeviceStatus(cDeviceStatus&(~DISCDROM)); } if(0 == nStatus){ ChangeDeviceStatus(cDeviceStatus|DISCDROM); } GUIDString = _T("4D36E965-E325-11CE-BFC1-08002BE10318"); UuidFromString((unsigned char *)GUIDString, &guid); break; case 2: // 2 代表移动存储设备 if(1 == nStatus){ ChangeDeviceStatus(cDeviceStatus&(~DISUSBSTOR)); } if(0 == nStatus){ ChangeDeviceStatus(cDeviceStatus|DISUSBSTOR); } //GUIDString = _T("36FC9E60-C465-11CF-8056-444553540000"); GUIDString = _T("4D36E967-E325-11CE-BFC1-08002BE10318"); UuidFromString((unsigned char *)GUIDString, &guid); break; case 3:// 3 代表打印机 if(1 == nStatus){ ChangeDeviceStatus(cDeviceStatus&(~DISPRINTER)); } if(0 == nStatus){ ChangeDeviceStatus(cDeviceStatus|(DISPRINTER)); } // GUIDString = _T("F37C5810-4D3F-11d0-B4BF-00AA00BBB723"); GUIDString = _T("4D36E979-E325-11CE-BFC1-08002BE10318"); UuidFromString((unsigned char *)GUIDString, &guid); break; case 4:// 4代表MODEM if(1 == nStatus){ ChangeDeviceStatus(cDeviceStatus&(~DISMODEM)); } if(0 == nStatus){ ChangeDeviceStatus(cDeviceStatus|(DISMODEM)); } GUIDString = _T("4D36E96D-E325-11CE-BFC1-08002BE10318"); UuidFromString((unsigned char *)GUIDString, &guid); break; } hDevInfo = SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT); if (INVALID_HANDLE_VALUE == hDevInfo) { FormatMSG(GetLastError(), &lpszMsg); throw lpszMsg; } DWORD i; SP_DEVINFO_DATA DeviceInfoData; ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA)); DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); ++i) { if (1 == nStatus) { StateChange(DICS_ENABLE, i, hDevInfo); } else if (0 == nStatus) { StateChange(DICS_DISABLE, i, hDevInfo); } } return SetupDiDestroyDeviceInfoList(hDevInfo); SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT)最后一个标志可以让你枚举所有的设备看MSDN 数据库查询问题 能帮我看看阿 我用itoa函数,错在哪里? 用jsp调用ActiveX控件,如何获得接口函数的多个返回值? 有关COM多线程的问题!! 学习网络编程应该看哪本书啊? 帮帮忙,我很郁闷,真的很需要帮助 用vc连sqlserver,用backup database备份数据库,可是用restore database还原的时候... 菜鸟问题 算是散分 在WINDOWS下如何将MYSQL5.5.30与OPENSSL联合编译。 SDI程序,在FormView上拖入了一个RichEdit控件,为什么会显示"建立空文档失败 "的错误? 关于getdate的用法,请进!!
刚好给你一段我的枚举代码,枚举出来的信息会填充入HDEVINFO中,可以传到DDK的StateChange函数中处理 TCHAR * GUIDString = NULL;
GUID guid;
ZeroMemory(&guid, sizeof(GUID));
switch(nIndex)
{
case 0: // 0 代表软驱
if(1 == nStatus){
ChangeDeviceStatus(cDeviceStatus&(~DISFLOPPY));//为启用置位
}
if(0 == nStatus){
ChangeDeviceStatus(cDeviceStatus|DISFLOPPY);//禁用
}
GUIDString = _T("4D36E980-E325-11CE-BFC1-08002BE10318");
UuidFromString((unsigned char *)GUIDString, &guid);
break;
case 1: // 1 代表光驱
if(1 == nStatus){
ChangeDeviceStatus(cDeviceStatus&(~DISCDROM));
}
if(0 == nStatus){
ChangeDeviceStatus(cDeviceStatus|DISCDROM);
}
GUIDString = _T("4D36E965-E325-11CE-BFC1-08002BE10318");
UuidFromString((unsigned char *)GUIDString, &guid);
break;
case 2: // 2 代表移动存储设备
if(1 == nStatus){
ChangeDeviceStatus(cDeviceStatus&(~DISUSBSTOR));
}
if(0 == nStatus){
ChangeDeviceStatus(cDeviceStatus|DISUSBSTOR);
}
//GUIDString = _T("36FC9E60-C465-11CF-8056-444553540000");
GUIDString = _T("4D36E967-E325-11CE-BFC1-08002BE10318");
UuidFromString((unsigned char *)GUIDString, &guid);
break;
case 3:// 3 代表打印机
if(1 == nStatus){
ChangeDeviceStatus(cDeviceStatus&(~DISPRINTER));
}
if(0 == nStatus){
ChangeDeviceStatus(cDeviceStatus|(DISPRINTER));
}
// GUIDString = _T("F37C5810-4D3F-11d0-B4BF-00AA00BBB723");
GUIDString = _T("4D36E979-E325-11CE-BFC1-08002BE10318");
UuidFromString((unsigned char *)GUIDString, &guid);
break;
case 4:// 4代表MODEM
if(1 == nStatus){
ChangeDeviceStatus(cDeviceStatus&(~DISMODEM));
}
if(0 == nStatus){
ChangeDeviceStatus(cDeviceStatus|(DISMODEM));
}
GUIDString = _T("4D36E96D-E325-11CE-BFC1-08002BE10318");
UuidFromString((unsigned char *)GUIDString, &guid);
break;
}
hDevInfo = SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
if (INVALID_HANDLE_VALUE == hDevInfo)
{
FormatMSG(GetLastError(), &lpszMsg);
throw lpszMsg;
}
DWORD i;
SP_DEVINFO_DATA DeviceInfoData;
ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA));
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); ++i)
{
if (1 == nStatus)
{
StateChange(DICS_ENABLE, i, hDevInfo);
}
else if (0 == nStatus)
{
StateChange(DICS_DISABLE, i, hDevInfo);
}
}
return SetupDiDestroyDeviceInfoList(hDevInfo);