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

王朝vc·作者佚名  2006-01-09
宽屏版  字体: |||超大  

实现的主要部分代码:

#include <setupapi.h>

#include <devguid.h>

#include <regstr.h>

#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

// success 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);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有