如果利用C#獲取系統有關環境和屬性,這個也是在網上問得比較多的問題,不過大部分只有提問沒有回答,最近正好想做有關方面的東西,整理了一下,提供給大家,希望能給大家提供參考意見:
首先需要定義幾個結構(struct) ,便於DllImport作為返回參數調用。以下是代碼:
CpuInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;
/**//**
* LayoutKind.Automatic:為了提高效率允許運行態對類型成員重新排序
* 注意:永遠不要使用這個選項來調用不受管轄的動態鏈接庫函數。
* LayoutKind.Explicit:對每個域按照FIEldOffset屬性對類型成員排序
* LayoutKind.Sequential:對出現在受管轄類型定義地方的不受管轄內存中的類型成員進行排序。
*/
/**//// <summary>
/// 定義CPU的信息結構
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct CpuInfo
...{
/**//// <summary>
/// OEM ID
/// </summary>
public uint dwOemId;
/**//// <summary>
/// 頁面大小
/// </summary>
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
/**//// <summary>
/// CPU個數
/// </summary>
public uint dwNumberOfProcessors;
/**//// <summary>
/// CPU類型
/// </summary>
public uint dwProcessorType;
public uint dwAllocationGranularity;
/**//// <summary>
/// CPU等級
/// </summary>
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}
MemoryInfo.cs
using System;
using System.Configuration;
using System.Runtime.InteropServices;
/**//**
* LayoutKind.Automatic:為了提高效率允許運行態對類型成員重新排序
* 注意:永遠不要使用這個選項來調用不受管轄的動態鏈接庫函數。
* LayoutKind.Explicit:對每個域按照FIEldOffset屬性對類型成員排序
* LayoutKind.Sequential:對出現在受管轄類型定義地方的不受管轄內存中的類型成員進行排序。
*/
/**//// <summary>
/// 定義內存的信息結構
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct MemoryInfo
...{
/**//// <summary>
///
/// </summary>
public uint dwLength;
/**//// <summary>
/// 已經使用的內存
/// </summary>
public uint dwMemoryLoad;
/**//// <summary>
/// 總物理內存大小
/// </summary>
public uint dwTotalPhys;
/**//// <summary>
/// 可用物理內存大小
/// </summary>
public uint dwAvailPhys;
/**//// <summary>
/// 交換文件總大小
/// </summary>
public uint dwTotalPageFile;
/**//// <summary>
/// 可用交換文件大小
/// </summary>
public uint dwAvailPageFile;
/**//// <summary>
/// 總虛擬內存大小
/// </summary>
public uint dwTotalVirtual;
/**//// <summary>
/// 可用虛擬內存大小
/// </summary>
public uint dwAvailVirtual;
}