using System;
|
using System.Diagnostics;
|
using System.Management;
|
using System.Text;
|
|
namespace HDLCloudMonitor.InfoMonitor
|
{
|
/// <summary>
|
/// windows api 名称
|
/// </summary>
|
public enum WindowsAPIType
|
{
|
/// <summary>
|
/// 内存
|
/// </summary>
|
Win32_PhysicalMemory,
|
/// <summary>
|
/// cpu
|
/// </summary>
|
Win32_Processor,
|
/// <summary>
|
/// 硬盘
|
/// </summary>
|
win32_DiskDrive,
|
/// <summary>
|
/// 电脑型号
|
/// </summary>
|
Win32_ComputerSystemProduct,
|
/// <summary>
|
/// 分辨率
|
/// </summary>
|
Win32_DesktopMonitor,
|
/// <summary>
|
/// 显卡
|
/// </summary>
|
Win32_VideoController,
|
/// <summary>
|
/// 操作系统
|
/// </summary>
|
Win32_OperatingSystem
|
|
}
|
public enum WindowsAPIKeys
|
{
|
/// <summary>
|
/// 名称
|
/// </summary>
|
Name,
|
/// <summary>
|
/// 显卡芯片
|
/// </summary>
|
VideoProcessor,
|
/// <summary>
|
/// 显存大小
|
/// </summary>
|
AdapterRAM,
|
/// <summary>
|
/// 分辨率宽
|
/// </summary>
|
ScreenWidth,
|
/// <summary>
|
/// 分辨率高
|
/// </summary>
|
ScreenHeight,
|
/// <summary>
|
/// 电脑型号
|
/// </summary>
|
Version,
|
/// <summary>
|
/// 硬盘容量
|
/// </summary>
|
Size,
|
/// <summary>
|
/// 内存容量
|
/// </summary>
|
Capacity,
|
/// <summary>
|
/// cpu核心数
|
/// </summary>
|
NumberOfCores
|
}
|
/// <summary>
|
/// 电脑信息类 单例
|
/// </summary>
|
public class Computer
|
{
|
public static Computer _instance;
|
private static readonly object _lock = new object();
|
static readonly PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
|
static readonly PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
|
static readonly PerformanceCounter uptime = new PerformanceCounter("System", "System Up Time");
|
public Computer()
|
{ }
|
public static Computer CreateComputer()
|
{
|
if (_instance == null)
|
{
|
lock (_lock)
|
{
|
if (_instance == null)
|
{
|
_instance = new Computer();
|
}
|
}
|
}
|
return _instance;
|
}
|
|
/// <summary>
|
/// 当前物理内存使用率
|
/// </summary>
|
/// <returns></returns>
|
public string GetPhysicalMemory()
|
{
|
string str = null;
|
ManagementObjectSearcher objCS = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem");
|
foreach (ManagementObject objMgmt in objCS.Get())
|
{
|
str = objMgmt["totalphysicalmemory"].ToString();
|
}
|
return str;
|
}
|
|
/// <summary>
|
/// 当前CPU状态
|
/// </summary>
|
/// <returns></returns>
|
public int getCurrentCpuUsage()
|
{
|
return (int)cpuCounter.NextValue();
|
}
|
|
/// <summary>
|
/// 内存
|
/// </summary>
|
/// <returns></returns>
|
public string getAvailableRAM()
|
{
|
var a = ramCounter.RawValue;
|
var b = ramCounter.NextValue();
|
var c = ramCounter.NextSample().RawValue;
|
return b + "MB";
|
}
|
|
public int GetMemoryRunStatus()
|
{
|
//获取总物理内存大小
|
ManagementClass cimobject1 = new ManagementClass("Win32_PhysicalMemory");
|
ManagementObjectCollection moc1 = cimobject1.GetInstances();
|
double available = 0, capacity = 0;
|
foreach (ManagementObject mo1 in moc1)
|
{
|
capacity += ((Math.Round(Int64.Parse(mo1.Properties["Capacity"].Value.ToString()) / 1024 / 1024 / 1024.0, 1)));
|
}
|
moc1.Dispose();
|
cimobject1.Dispose();
|
|
|
//获取内存可用大小
|
ManagementClass cimobject2 = new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory");
|
ManagementObjectCollection moc2 = cimobject2.GetInstances();
|
foreach (ManagementObject mo2 in moc2)
|
{
|
available += ((Math.Round(Int64.Parse(mo2.Properties["AvailableMBytes"].Value.ToString()) / 1024.0, 1)));
|
|
}
|
moc2.Dispose();
|
cimobject2.Dispose();
|
|
return (int)(Math.Round((capacity - available) / capacity * 100, 0));
|
}
|
|
/// <summary>
|
/// 获取系统内存大小
|
/// </summary>
|
/// <returns>内存大小(单位M)</returns>
|
public string GetPhisicalMemory()
|
{
|
ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用于查询一些如系统信息的管理对象
|
searcher.Query = new SelectQuery(WindowsAPIType.Win32_PhysicalMemory.ToString(), "",
|
new string[] { WindowsAPIKeys.Capacity.ToString() });//设置查询条件
|
ManagementObjectCollection collection = searcher.Get(); //获取内存容量
|
ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator();
|
|
long capacity = 0;
|
while (em.MoveNext())
|
{
|
ManagementBaseObject baseObj = em.Current;
|
if (baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value != null)
|
{
|
try
|
{
|
capacity += long.Parse(baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value.ToString());
|
}
|
catch
|
{
|
return "查询失败";
|
}
|
}
|
}
|
return ToGB((double)capacity, 1024.0);
|
}
|
|
/// <summary>
|
/// 将字节转换为GB
|
/// </summary>
|
/// <param name="size">字节值</param>
|
/// <param name="mod">除数,硬盘除以1000,内存除以1024</param>
|
/// <returns></returns>
|
public static string ToGB(double size, double mod)
|
{
|
String[] units = new String[] { "B", "KB", "MB", "GB", "TB", "PB" };
|
int i = 0;
|
while (size >= mod)
|
{
|
size /= mod;
|
i++;
|
}
|
return Math.Round(size) + units[i];
|
}
|
}
|
}
|