首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言獲取計算機硬件信息(CPU、顯卡、內存、硬盤)

     編輯:程式設計綜合問答

思路

C 語言無標準庫直接獲取硬件信息,需調用平台特定 API:

  • Windows:WMI (IWbemLocator)、SetupAPI、GetSystemInfo、GlobalMemoryStatusEx、GetLogicalDriveStrings + GetDiskFreeSpaceEx、EnumDisplayDevices。
  • Linux:讀取 /proc/cpuinfo、/proc/meminfo、/sys/class/dmi/id/、lspci、lsblk、dmesg 等虛擬文件或調用 libudev、libpci。

Windows 關鍵 API 示例

CPU 信息

#include 
#include 

void PrintCpuInfo() {
    SYSTEM_INFO si; GetSystemInfo(&si);
    printf("處理器架構: %u\n處理器數: %u\n頁大小: %u\n", si.wProcessorArchitecture, si.dwNumberOfProcessors, si.dwPageSize);
    // 詳細型號需 WMI 查詢 Win32_Processor
}

內存信息

#include 
void PrintMemoryInfo() {
    MEMORYSTATUSEX ms; ms.dwLength = sizeof(ms);
    GlobalMemoryStatusEx(&ms);
    printf("總物理內存: %llu MB\n可用: %llu MB\n", ms.ullTotalPhys/1024/1024, ms.ullAvailPhys/1024/1024);
}

硬盤信息

void PrintDiskInfo() {
    char drives[256]; GetLogicalDriveStringsA(256, drives);
    for (char* d = drives; *d; d += strlen(d)+1) {
        ULARGE_INTEGER free, total, totalFree;
        GetDiskFreeSpaceExA(d, &free, &total, &totalFree);
        printf("%s 總計: %.2f GB 可用: %.2f GB\n", d, total.QuadPart/1024.0/1024/1024, free.QuadPart/1024.0/1024/1024);
    }
}

顯卡信息

#include 
void PrintGpuInfo() {
    DISPLAY_DEVICEA dd; dd.cb = sizeof(dd);
    for (DWORD i = 0; EnumDisplayDevicesA(NULL, i, &dd, 0); i++) {
        printf("設備: %s\n描述: %s\n", dd.DeviceName, dd.DeviceString);
    }
}

WMI 綜合查詢(推薦獲取詳細型號)

參考:CSDN 相關帖子,核心步驟:

  1. CoInitializeEx 初始化 COM。
  2. CoCreateInstance(CLSID_WbemLocator) 獲取 IWbemLocator。
  3. ConnectServer 連接 ROOT\\CIMV2。
  4. CoSetProxyBlanket 設置安全級別。
  5. ExecQuery("SELECT * FROM Win32_Processor") 等查詢類。
  6. 遍歷 IEnumWbemClassObject 讀取屬性。

Linux 簡易實現

// 讀取 /proc/cpuinfo
FILE* f = fopen("/proc/cpuinfo", "r");
char line[256];
while (fgets(line, sizeof(line), f)) {
    if (strncmp(line, "model name", 10) == 0) printf("%s", line);
}
fclose(f);

建議

  • 跨平台項目建議封裝抽象層,Windows 用 WMI/PDH,Linux 讀 /proc//sys,macOS 用 sysctl/IOKit。
  • 成熟庫:libcpuid(CPU)、sysinfo(內存)、libpci(PCI 設備/顯卡)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved