列舉pc硬體裝置並獲取相關資訊
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#pragma comment(lib, "setupapi")
void GetDeviceInfo()
{
//得到裝置資訊集
HDEVINFO hDevInfo = SetupDiGetClassDevs(
(LPGUID)&GUID_DEVCLASS_DISPLAY,
NULL,
0,
DIGCF_PRESENT);
//DIGCF_PRESENT - 只返回當前存在的裝置。 //DIGCF_ALLCLASSES - 返回所有已安裝的裝置。如果這個標誌設定了,ClassGuid引數將被忽略。 //DIGCF_PROFILE - 只返回當前硬體配置檔案中的裝置。
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("Error! SetupDiGetClassDevs() return %d\n", GetLastError());
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}
TCHAR szBuf[MAX_PATH];
SP_DEVINFO_DATA spDevInfoData = { sizeof(SP_DEVINFO_DATA) };
// 開始列舉裝置
for (DWORD i = 0; SetupDiEnumDeviceInfo
{
// 得到裝置類描述
if (SetupDiGetClassDescription(
&spDevInfoData.ClassGuid,
szBuf,
MAX_PATH,
NULL))
{
printf("\n%03d : ClassDescription = %s\n", i, szBuf);
}
// 得到裝置例項的唯一標識ID(由登錄檔路徑組成)
if (SetupDiGetDeviceInstanceId(
hDevInfo,
&spDevInfoData,
szBuf,
MAX_PATH,
NULL))
{
printf("%03d : InstanceId = %s\n", i, szBuf);
}
// 得到裝置名稱
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_DEVICEDESC,
NULL,
(PBYTE)szBuf,
MAX_PATH,
NULL))
{
MessageBox(NULL, szBuf, 0, MB_OK);
printf("%03d : DeviceDesc = %s\n", i, szBuf);
}
// 得到裝置型號
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_FRIENDLYNAME,
NULL,
(PBYTE)szBuf,
MAX_PATH,
NULL))
{
printf("%03d : FriendName = %s\n", i, szBuf);
}
// 得到裝置在登錄檔中的子路徑
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_DRIVER,
NULL,
(PBYTE)szBuf,
MAX_PATH,
NULL))
{
printf("%03d : Regedit Path = %s\n", i, szBuf);
}
}
//printf("\nCdrom count = %d\n", i);
getchar();
return;
}
/*
GUID_DEVCLASS_FDC軟盤控制器
GUID_DEVCLASS_DISPLAY顯示卡
GUID_DEVCLASS_CDROM光碟機
GUID_DEVCLASS_KEYBOARD鍵盤
GUID_DEVCLASS_COMPUTER計算機
GUID_DEVCLASS_SYSTEM系統
GUID_DEVCLASS_DISKDRIVE磁碟驅動器
GUID_DEVCLASS_MEDIA聲音、視訊和遊戲控制器
GUID_DEVCLASS_MODEMMODEM
GUID_DEVCLASS_MOUSE滑鼠和其他指標裝置
GUID_DEVCLASS_NET網路裝置器
GUID_DEVCLASS_USB通用序列匯流排控制器
GUID_DEVCLASS_FLOPPYDISK軟盤驅動器
GUID_DEVCLASS_UNKNOWN未知裝置
GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器
GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器
GUID_DEVCLASS_PORTS埠(COM 和 LPT)
GUID_DEVCLASS_MONITOR監視器
*/