首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 獲取系統硬體資訊:CPU/記憶體/時間結構體定義與 P/Invoke 簽名 (上)

     編輯:關於C語言

為了透過 DllImport 調用 Win32 API 獲取底層系統資訊,首先需要定義與非受控記憶體佈局完全一致的結構體。本文提供三大核心結構體完整定義。

結構體設計原則

  • 標記 [StructLayout(LayoutKind.Sequential)]:成員按宣告順序循序排列,符合 C/C++ 結構體記憶體佈局
  • 避免 LayoutKind.Auto (運行時重排) 與 LayoutKind.Explicit (需手動 FieldOffset) 用於 P/Invoke 場景
  • 所有欄位對應 Win32 API 文檔定義的類型與順序

CpuInfo - 對應 SYSTEM_INFO

[StructLayout(LayoutKind.Sequential)]
public struct CpuInfo
{
    public uint dwOemId;                    // OEM ID
    public uint dwPageSize;                 // 頁面大小
    public uint lpMinimumApplicationAddress;
    public uint lpMaximumApplicationAddress;
    public uint dwActiveProcessorMask;      // 作用中處理器遮罩
    public uint dwNumberOfProcessors;       // CPU 核心數
    public uint dwProcessorType;            // CPU 類型
    public uint dwAllocationGranularity;    // 配置粒度
    public uint dwProcessorLevel;           // CPU 等級
    public uint dwProcessorRevision;        // CPU 修訂版本
}

MemoryInfo - 對應 MEMORYSTATUS

[StructLayout(LayoutKind.Sequential)]
public struct MemoryInfo
{
    public uint dwLength;                   // 結構大小
    public uint dwMemoryLoad;               // 記憶體使用率 (%)
    public uint dwTotalPhys;                // 總物理記憶體
    public uint dwAvailPhys;                // 可用物理記憶體
    public uint dwTotalPageFile;            // 總分頁檔案
    public uint dwAvailPageFile;            // 可用分頁檔案
    public uint dwTotalVirtual;             // 總虛擬記憶體
    public uint dwAvailVirtual;             // 可用虛擬記憶體
}

SystemTimeInfo - 對應 SYSTEMTIME

[StructLayout(LayoutKind.Sequential)]
public struct SystemTimeInfo
{
    public ushort wYear;        // 年
    public ushort wMonth;       // 月
    public ushort wDayOfWeek;   // 星期
    public ushort wDay;         // 日
    public ushort wHour;        // 時
    public ushort wMinute;      // 分
    public ushort wSecond;      // 秒
    public ushort wMilliseconds;// 毫秒
}

這些結構體將在下篇配合 kernel32.dll 的 GetSystemInfo、GlobalMemoryStatus、GetSystemTime 實現完整資訊讀取功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved