枚举系统中已经安装的所有硬件设备

发表于:2007-07-01来源:作者:点击数: 标签:
实现的主要部分代码: #include #include #include #pragma comment(lib,"Setupapi.lib") CListBox m_strList; ........ 枚举所有硬件设备的主要实现代码: m_strList.ResetContent(); HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; // Crea


实现的主要部分代码:

#include
#include
#include
#pragma comment(lib,"Setupapi.lib")

CListBox m_strList;

........
枚举所有硬件设备的主要实现代码:

m_strList.ResetContent();

HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;

// Create a HDEVINFO with all present devices. hDevInfo = SetupDiGetClassDevs(NULL,
0, // Enumerator
0,
DIGCF_PRESENT | DIGCF_ALLCLASSES );

if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return ;
}

// Enumerate through all devices in Set.

DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i, &DeviceInfoData);i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;

//
// Call function with null to begin with,
// then use the returned buffer size
// to Alloc the buffer. Keep calling until
// suclearcase/" target="_blank" >ccess or an unknown failure.
//
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
buffer = (char*)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
}

m_strList.AddString(buffer);

if (buffer) LocalFree(buffer);
}

if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
return ;
}

// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);

测试环境
WINXP,WIN2000以上操作系统!

原文转自:http://www.ltesting.net