在C#中实现获取电脑系统的系统参数

public class SystemInfo
    {
        #region 读取系统各种数据
        /// <summary>
        /// 唯一实例
        /// </summary>
        public readonly static SystemInfo DataManager = new SystemInfo();
        private PerformanceCounter cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total");//保持一个cpu实例,避免重复创建
        //定义内存的信息结构
        [StructLayout(LayoutKind.Sequential)]
        public struct MEMORY_INFO
        {
            public uint dwLength; //当前结构体大小
            public uint dwMemoryLoad; //当前内存使用率
            public ulong ullTotalPhys; //总计物理内存大小
            public ulong ullAvailPhys; //可用物理内存大小
            public ulong ullTotalPageFile; //总计交换文件大小
            public ulong ullAvailPageFile; //总计交换文件大小
            public ulong ullTotalVirtual; //总计虚拟内存大小
            public ulong ullAvailVirtual; //可用虚拟内存大小
            public ulong ullAvailExtendedVirtual; //保留 这个值始终为0
        }

        [DllImport("kernel32")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);//获取内存相关数据

        /// <summary> 
        /// 构造方法 
        /// </summary>     
        public SystemInfo()
        {
            //cpu.NextValue();//因为第一次获取CPU使用率总是0,所以在此获取一次CPU使用率,避免画面显示CPU为0的情况
        }


        /// <summary>
        /// 获取电脑磁盘剩余空间
        /// </summary>
        /// <returns></returns>
        public string GetDrivers()
        {
            double SumSpace = 0;
            double FreeSpace = 0;
            string result = "";
            DriveInfo[] drives = DriveInfo.GetDrives();
            foreach (DriveInfo drive in drives)
            {
                if (!drive.IsReady)
                    continue;
                if (drive.Name.Trim() =="E:\\" )
                {
                    SumSpace += double.Parse(FormatSize(drive.TotalSize).Replace("G", "").Trim());
                    FreeSpace += double.Parse(FormatSize(drive.TotalFreeSpace).Replace("G", "").Trim());
                }
            }
            if (SumSpace==0&& FreeSpace==0)
            {
                result = "异常";
            }
            else
            {
                result = (FreeSpace / SumSpace).ToString("P");
            }
            return result;
        }
        /// <summary>
        /// 获取电脑IP地址
        /// </summary>
        /// <returns></returns>
        public string GetIPAddress()
        {
            string hostName = Dns.GetHostName();
            IPAddress[] iPs = Dns.GetHostEntry(hostName).AddressList;
            foreach (IPAddress ip in iPs)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            return "";
        }


        /// <summary>
        /// 获取CPU实时占用率
        /// </summary>
        /// <returns></returns>
        public string GetCpuUtilization()
        {
            return String.Format("CPU实时占用{0}%", cpu.NextValue());
        }

        /// <summary>
        /// 获取内存实时占用率
        /// </summary>
        /// <returns></returns>
        public string GetMemoryUtilization()
        {
            return String.Format("内存实时占用{0}/{1}", FormatSize(GetUsedPhys()), FormatSize(GetTotalPhys()));
        }

        /// <summary>
        /// 格式化容量大小
        /// </summary>
        /// <param name="size">容量(B)</param>
        /// <returns>已格式化的容量</returns>
        private string FormatSize(double size)
        {
            double d = (double)size;
            int i = 0;
            while ((d > 1024) && (i < 5))
            {
                d /= 1024;
                i++;
            }
            string[] unit = { "B", "KB", "MB", "G", "T" };
            return (string.Format("{0} {1}", Math.Round(d, 2), unit[i]));
        }

        /// <summary>
        /// 获得当前内存使用情况
        /// </summary>
        /// <returns></returns>
        public MEMORY_INFO GetMemoryStatus()
        {
            MEMORY_INFO mi = new MEMORY_INFO();
            mi.dwLength = (uint)Marshal.SizeOf(mi);
            GlobalMemoryStatusEx(ref mi);
            return mi;
        }

        /// <summary>
        /// 获得当前可用物理内存大小
        /// </summary>
        /// <returns>当前可用物理内存(B)</returns>
        public ulong GetAvailPhys()
        {
            MEMORY_INFO mi = GetMemoryStatus();
            return mi.ullAvailPhys;
        }

        /// <summary>
        /// 获得当前已使用的内存大小
        /// </summary>
        /// <returns>已使用的内存大小(B)</returns>
        public ulong GetUsedPhys()
        {
            MEMORY_INFO mi = GetMemoryStatus();
            return (mi.ullTotalPhys - mi.ullAvailPhys);
        }

        /// <summary>
        /// 获得当前总计物理内存大小
        /// </summary>
        /// <returns&amp;gt;总计物理内存大小(B)&amp;lt;/returns&amp;gt;
        public ulong GetTotalPhys()
        {
            MEMORY_INFO mi = GetMemoryStatus();
            return mi.ullTotalPhys;
        }
        public string GetTurnonTime()
        {
            return DateTime.Now.AddMilliseconds(-Environment.TickCount).ToString();
        }
        #endregion
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值