一个简单的小工具,主要用来获取当期的电脑信息以及内存的使用情况。本来也没想着写这个玩意,还不如随便下个相关的软件好使,但是前一段时间为了追查系统卡顿的问题,所以就加上了一段统计内存的代码,用来看看是否由这个引起的。
既然统计了内存相关的数据,干脆一不做二不休,又加了下CPU以及硬盘的使用情况统计。
统计的准确不准确我也不好说,因为我也不太能确定,暂且就做个参考值吧。或许使用很多大佬封装过的第三方DLL会准确很多。
下面工具中还展示了部分关于电脑的基本信息数据,这个在之前的时候应该是有发过。
主要还是使用windows WMI,虽然下列关于内存情况的统计没用(但其实也可以统计到),因为我感觉这个方式可能稍微准确点。。。
实现功能:
- 获取系统内存、CPU的使用情况
开发环境:
开发工具: Visual Studio 2013
.NET Framework版本:4.5
实现代码:
public class SystemUtil{#region 内存#region 获得内存信息API[DllImport("kernel32.dll")][return: MarshalAs(UnmanagedType.Bool)]private static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);//定义内存的信息结构[StructLayout(LayoutKind.Sequential)]private 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}private static MEMORY_INFO GetMemoryInfo(){MEMORY_INFO MemoryInfo = new MEMORY_INFO();MemoryInfo.DWLength = (uint)System.Runtime.InteropServices.Marshal.SizeOf(MemoryInfo);GlobalMemoryStatusEx(ref MemoryInfo);return MemoryInfo;}#endregion/// <summary>/// 获取系统内存/// </summary>/// <returns></returns>public static string GetSysMemory(){MEMORY_INFO MemoryInfo = GetMemoryInfo();return ConvertBytes((long)MemoryInfo.ullTotalPhys);}/// <summary>/// 获取剩余内存/// </summary>/// <returns></returns>public static string GetUnUsedMemory(){MEMORY_INFO MemoryInfo = GetMemoryInfo();return ConvertBytes((long)MemoryInfo.ullAvailPhys);}/// <summary>/// 获取已使用内存/// </summary>/// <returns></returns>public static string GetUsedMemory(){MEMORY_INFO MemoryInfo = GetMemoryInfo();return ConvertBytes((long)(MemoryInfo.ullTotalPhys - MemoryInfo.ullAvailPhys));}/// <summary>/// 获取应用使用内存/// </summary>/// <param name="appName"></param>/// <returns></returns>public static string GetAppMemory(string appName){Process CurrentProcess = Process.GetProcessesByName(appName)[0];PerformanceCounter Perform = new PerformanceCounter("Process", "Working Set - Private", CurrentProcess.ProcessName);return ConvertBytes((long)Perform.NextValue());}/// <summary>/// 获取当前应用使用内存/// </summary>/// <returns></returns>public static string GetCurrentAppMemory(){long memory = Process.GetCurrentProcess().PrivateMemorySize64;return ConvertBytes(memory);}#endregion#region CPU/// <summary>/// 获取CPU使用率/// </summary>/// <returns></returns>public static string GetUsedCPU(){ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOS_Processor");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){if (mo["Name"].ToString() == "_Total"){list.Add(mo["PercentProcessorTime"].ToString());}}return list.Sum(s => int.Parse(s)) + "%";}#endregion#region 硬盘public static string GetUsedDisk(){ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfDisk_PhysicalDisk");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){if (mo["Name"].ToString() == "_Total"){list.Add(mo["PercentDiskTime"].ToString());}}return list.Sum(s => int.Parse(s)) + "%";}#endregion#region 电脑信息/// <summary>/// 获取CPU序列号/// </summary>/// <returns></returns>public static string GetCpuID(){ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo.Properties["ProcessorId"].Value.ToString());}return string.Join("|", list);//若需要获取所有属性,可迭代ManagementObject.Properties//foreach (PropertyData pd in mo.Properties)//{// Console.WriteLine(pd.Name + "----" + pd.Value);//}}/// <summary>/// 获取Mac地址/// </summary>/// <returns></returns>public static string GetMac(){ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){list.Add(mo["MacAddress"].ToString());}}return string.Join("|", list);}/// <summary>/// 获取IP地址/// </summary>/// <returns></returns>public static string GetIp(){ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){list.Add(((Array)mo.Properties["IpAddress"].Value).GetValue(0).ToString());}}return string.Join("|", list);}/// <summary>/// 获取硬盘序列号/// </summary>/// <returns></returns>public static string GetDiskID(){ManagementClass mc = new ManagementClass("Win32_DiskDrive");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo.Properties["Model"].Value.ToString());}return string.Join("|", list);}/// <summary>/// 获取系统名称/// </summary>/// <returns></returns>public static string GetSystemName(){ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo["Name"].ToString());}return string.Join("|", list);// return System.Environment.GetEnvironmentVariable("ComputerName")}/// <summary>/// 获取当前登录用户/// </summary>/// <returns></returns>public static string GetLoginUser(){ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo["UserName"].ToString());}return string.Join("|", list);}/// <summary>/// 获取电脑类型/// </summary>/// <returns></returns>public static string GetPcType(){ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo["SystemType"].ToString());}return string.Join("|", list);}/// <summary>/// 获取系统内存/// </summary>/// <returns></returns>public static string GetSysMemory2(){ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo["TotalPhysicalMemory"].ToString());}return string.Join("|", list);}/// <summary>/// 获取剩余内存/// </summary>/// <returns></returns>public static string GetUnUsedMemory2(){ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory");ManagementObjectCollection moc = mc.GetInstances();long memory = 0;foreach (ManagementObject mo in moc){memory += long.Parse(mo.Properties["AvailableMBytes"].Value.ToString());}return ConvertBytes(memory);}/// <summary>/// 获取电脑品牌/// </summary>/// <returns></returns>public static string GetPcBrand(){ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo["Manufacturer"].ToString());}return string.Join("|", list);}/// <summary>/// 获取电脑型号/// </summary>/// <returns></returns>public static string GetPcModel(){ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();List<string> list = new List<string>();foreach (ManagementObject mo in moc){list.Add(mo["SystemFamily"].ToString());}return string.Join("|", list);}#endregionpublic static string ConvertBytes(long len){double dlen = len;string[] sizes = { "B", "KB", "MB", "GB", "TB" };int order = 0;while (dlen >= 1024 && order + 1 < sizes.Length){order++;dlen = dlen / 1024;}return String.Format("{0:0.##} {1}", dlen, sizes[order]);}}
private void btnDetection_Click(object sender, EventArgs e){label1.Text = "电脑品牌:" + SystemUtil.GetPcBrand();label2.Text = "电脑型号:" + SystemUtil.GetPcModel();label3.Text = "电脑类型:" + SystemUtil.GetPcType();label4.Text = "系统名称:" + SystemUtil.GetSystemName();label5.Text = "当前用户:" + SystemUtil.GetLoginUser();label6.Text = "IP地址:" + SystemUtil.GetIp();label7.Text = "MAC地址:" + SystemUtil.GetMac();if (btnDetection.Text == "开始"){timer1.Start();btnDetection.Text = "停止";}else{timer1.Stop();btnDetection.Text = "开始";}}private void timer1_Tick(object sender, EventArgs e){label8.Text = "系统内存:" + SystemUtil.GetSysMemory();label9.Text = "剩余内存:" + SystemUtil.GetUnUsedMemory();label10.Text = "使用内存:" + SystemUtil.GetUsedMemory();label11.Text = "当前应用内存:" + SystemUtil.GetCurrentAppMemory();label12.Text = "微信使用内存:" + SystemUtil.GetAppMemory("WeChat");label13.Text = "CPU占用率:" + SystemUtil.GetUsedCPU();label14.Text = "磁盘使用率:" + SystemUtil.GetUsedDisk();}
实现效果:
由简入繁,拿来即用
更多精彩,请持续关注公众号: