以下代碼段演示如何顯示已經安裝的所有硬件設備的列表:
#include <stdio.h> #include <windows.h> #include <setupapi.h> #include <devguid.h> #include <regstr.h> int main( int argc, char *argv[ ], char *envp[ ] ) { 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 1; } // 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 = LocalAlloc(LPTR,buffersize); } else { // Insert error handling here. break; } } printf("Result:[%s]/n",buffer); if (buffer) LocalFree(buffer); } if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS ) { // Insert error handling here. return 1; } // Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return 0; }
以下代碼段演示如何檢索系統上的所有顯示適配器組:
hDevInfo = SetupDiGetClassDevs( (LPGUID) &GUID_DEVCLASS_DISPLAY, 0, 0, DIGCF_PRESENT);
以下代碼段演示如何檢索外圍組件互連 (PCI) 總線上的所有設備組:
hDevInfo = SetupDiGetClassDevs(NULL, REGSTR_KEY_PCIENUM, // Enumerator 0, DIGCF_PRESENT | DIGCF_ALLCLASSES );
要求設備實例句柄(如 API 函數的 Config Manager 組)的 Windows API 函數可以使用 SetupDiEnumDeviceInfo 函數返回的 SP_DEVINFO_DATA 結構中的 DevInst 值。