系统信息类 - 获取CPU、内存、磁盘、进程信息(XQX)
///
/// 系统信息类 - 获取CPU、内存、磁盘、进程信息
///
public class SystemInfo
{
private int m_ProcessorCount = 0; //CPU个数
//private PerformanceCounter pcCpuLoad; //CPU计数器
private long m_PhysicalMemory = 0; //物理内存
PerformanceCounter disk = null;//磁盘读写计数器
private const int GW_HWNDFIRST = 0;
private const int GW_HWNDNEXT = 2;
private const int GWL_STYLE = (-16);
private const int WS_VISIBLE = 268435456;
private const int WS_BORDER = 8388608;
#region AIP声明
[DllImport("IpHlpApi.dll")]
extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);
[DllImport("User32")]
private extern static int GetWindow(int hWnd, int wCmd);
[DllImport("User32")]
private extern static int GetWindowLongA(int hWnd, int wIndx);
[DllImport("user32.dll")]
private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static int GetWindowTextLength(IntPtr hWnd);
#endregion
#region 构造函数
///
/// 构造函数,初始化计数器等
///
public SystemInfo()
{
//初始化CPU计数器
//pcCpuLoad = new PerformanceCounter();
//pcCpuLoad.CategoryName = "Processor";
//pcCpuLoad.CounterName = "%Processor Time";
//pcCpuLoad.InstanceName = "_Total";
//pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
//pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");
//pcCpuLoad.MachineName = ".";
//pcCpuLoad.NextValue();
//CPU个数
m_ProcessorCount = Environment.ProcessorCount;
try
{
disk = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
}
catch
{
}
//获得物理内存
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if (mo["TotalPhysicalMemory"] != null)
{
m_PhysicalMemory = long.Parse(mo["TotalPhysicalMemory"].ToString());
}
}
}
#endregion
#region CPU个数
///
/// 获取CPU个数
///
public int ProcessorCount
{
get
{
return m_ProcessorCount;
}
}
#endregion
#region CPU占用率
///
/// 获取CPU占用率
///
public decimal CpuLoad
{
get
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor WHERE Name=\"_Total\"");
var cpuItem = searcher.Get().Cast<ManagementObject>().Select(item => new { PercentProcessorTime = item["PercentProcessorTime"] }).First();
if (cpuItem != null && cpuItem.PercentProcessorTime != null)
return Convert.ToDecimal(cpuItem.PercentProcessorTime.ToString());
else
return -1;
}
catch
{
return -1;
}
}
}
#endregion
#region
public float DiskLoad
{
get
{
if (disk == null)
return -1;
return disk.NextValue();
}
}
#endregion
#region 可用内存
///
/// 获取可用内存
///
public long MemoryAvailable
{
get
{
long availablebytes = 0;
//ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_PerfRawData_PerfOS_Memory");
//foreach (ManagementObject mo in mos.Get())
//{
// availablebytes = long.Parse(mo["Availablebytes"].ToString());
//}
ManagementClass mos = new ManagementClass("Win32_OperatingSystem");
foreach (ManagementObject mo in mos.GetInstances())
{
if (mo["FreePhysicalMemory"] != null)
{
availablebytes = 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
}
}
return availablebytes;
}
}
#endregion
#region 物理内存
///
/// 获取物理内存
///
public long PhysicalMemory
{
get
{
return m_PhysicalMemory;
}
}
#endregion
#region 获得分区信息
///
/// 获取分区信息
///
public List<DiskInfo> GetLogicalDrives()
{
List<DiskInfo> drives = new List<DiskInfo>();
ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection disks = diskClass.GetInstances();
foreach (ManagementObject disk in disks)
{
drives.Add(new DiskInfo()
{
Name = disk["Name"].ToString(),
Size = long.Parse(disk["Size"].ToString()),
FreeSpace = long.Parse(disk["FreeSpace"].ToString()),
DiskOccupancyRatio = (long.Parse(disk["Size"].ToString()) - long.Parse(disk["FreeSpace"].ToString())) * 100 / long.Parse(disk["Size"].ToString())
});
}
return drives;
}
///
/// 获取特定分区信息
///
/// 盘符
public List<DiskInfo> GetLogicalDrives(char DriverID)
{
List<DiskInfo> drives = new List<DiskInfo>();
WqlObjectQuery wmiquery = new WqlObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DeviceID = ’" + DriverID + ":’");
ManagementObjectSearcher wmifind = new ManagementObjectSearcher(wmiquery);
foreach (ManagementObject disk in wmifind.Get())
{
drives.Add(new DiskInfo()
{
Name = disk["Name"].ToString(),
Size = long.Parse(disk["Size"].ToString()),
FreeSpace = long.Parse(disk["FreeSpace"].ToString()),
DiskOccupancyRatio = (long.Parse(disk["Size"].ToString()) - long.Parse(disk["FreeSpace"].ToString())) / (long.Parse(disk["Size"].ToString())) * 100
});
}
return drives;
}
#endregion
#region 获取CPU温度
public string GetCupTem()
{
//string CPU温度 = "MSAcpi_ThermalZoneTemperature";
//Double 温度 = 0;
//ManagementObjectSearcher mos = new ManagementObjectSearcher(@"root\WMI", "Select * From " + CPU温度);
//foreach (System.Management.ManagementObject mo in mos.Get())
//{
// 温度 = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;
// result = 温度.ToString() + " °C";
//}
double temp = 0;
#region 方法1
if (temp <= 0)
{
try
{
Computer myComputer = new Computer();
UpdateVisitor updateVisitor = new UpdateVisitor();
myComputer.Open();
myComputer.CPUEnabled = true;
myComputer.Accept(updateVisitor);
foreach (var hardwareItem in myComputer.Hardware)
{
if (hardwareItem.HardwareType == HardwareType.CPU)
{
foreach (var sensor in hardwareItem.Sensors)
{
//温度
if (sensor.SensorType == SensorType.Temperature)
{
if (sensor.Value != null)
{
if (temp == 0)
{
temp = (double)sensor.Value;
}
else if ((double)sensor.Value < temp)
{
temp = (double)sensor.Value;
//FileOperate.AddLogMessagge(FileOperate.GetMyPath(""), "【PCTemperature() 异常】" + sensor.Name + "--" + temp.ToString(), "PCTemperature()", LogClass.error, "ComputerState");
}
}
}
}
}
}
myComputer.Close();
}
catch (Exception ex)
{
temp = 0;
}
}
#endregion
return temp.ToString();
}
#endregion
#region 获取硬盘温度
public string GetHardBoardTem()
{
string 硬盘温度 = "MSStorageDriver_ATAPISmartData";
string result = "";
ManagementObjectSearcher mos = new ManagementObjectSearcher(@"root\WMI", "Select * From " + 硬盘温度);
mos.Query = new ObjectQuery("Select * From " + 硬盘温度);
foreach (System.Management.ManagementObject mo in mos.Get())
{
byte[] data = (byte[])mo.GetPropertyValue("VendorSpecific");
result = data[3] + " °C";
}
return result;
}
#endregion
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)