1. 程式人生 > >列舉pc硬體裝置並獲取相關資訊

列舉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

(hDevInfo, i, &spDevInfoData); i++)

{

// 得到裝置類描述

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監視器

*/