using Masuit.Tools.Hardware; using Microsoft.Win32; using System; using System.Diagnostics; using System.Linq; using System.Management; using System.Runtime.InteropServices; using System.Text; using System.Threading; using static System.String; namespace Masuit.Tools.Win32 { /// /// Windows系统的系列方法 /// public static class Windows { /// /// 跨平台调用C++的方法 /// /// 程序句柄 /// [DllImport("psapi.dll")] private static extern int EmptyWorkingSet(IntPtr hwProc); /// /// 清理系统内存,返回优化内存后的内存占用率 /// /// 优化内存后的内存占用率 public static double ClearMemory() { ClearMemorySilent(); Thread.Sleep(1000); return SystemInfo.GetRamInfo().MemoryUsage; } /// /// 静默清理系统内存 /// public static void ClearMemorySilent() { GC.Collect(); GC.WaitForPendingFinalizers(); foreach (var p in Process.GetProcesses()) { using (p) { if ((p.ProcessName.Equals("System")) && (p.ProcessName.Equals("Idle"))) { //两个系统的关键进程,不整理 continue; } try { EmptyWorkingSet(p.Handle); } catch { // ignored } } } GC.Collect(); } /// /// 运行一个控制台程序并返回其输出参数。 /// /// 程序名 /// 输入参数 /// 是否在控制台输出日志 /// public static string RunApp(string filename, string arguments, bool recordLog) { try { if (recordLog) { Trace.WriteLine(filename + " " + arguments); } using var proc = new Process { StartInfo = { FileName = filename, CreateNoWindow = true, Arguments = arguments, RedirectStandardOutput = true, UseShellExecute = false } }; proc.Start(); if (recordLog) { using var sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default); //上面标记的是原文,下面是我自己调试错误后自行修改的 Thread.Sleep(100); //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行 if (!proc.HasExited) //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行 { proc.Kill(); } string txt = sr.ReadToEnd(); Trace.WriteLine(txt); return txt; } return ""; } catch (Exception ex) { Trace.WriteLine(ex); return ex.Message; } } /// /// 获取操作系统版本 /// /// public static string GetOsVersion() { try { return Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion")?.GetValue("ProductName").ToString(); } catch { return Environment.OSVersion.VersionString; } } /// /// 获取当前进程的CPU使用率 /// /// public static float GetCpuUsageForProcess() { using var process = Process.GetCurrentProcess(); var currentProcessName = process.ProcessName; using var cpuCounter = new PerformanceCounter("Process", "% Processor Time", currentProcessName); cpuCounter.NextValue(); return cpuCounter.NextValue(); } /// /// 获取进程的CPU使用率 /// /// 进程名字 /// public static float GetCpuUsageForProcess(string processName) { using var cpuCounter = new PerformanceCounter("Process", "% Processor Time", processName); cpuCounter.NextValue(); return cpuCounter.NextValue(); } } /// /// 服务器信息 /// public class WindowsServer { /// /// CPUID /// public string CpuId; //CPU的ID /// /// CPU插槽数 /// public int CpuCount; //CPU的个数 /// /// CPU主频 /// public string[] CpuMhz; //CPU频率 单位:hz /// /// mac地址 /// public string MacAddress; //计算机的MAC地址 /// /// 硬盘ID /// public string DiskId; //硬盘的ID /// /// 硬盘大小 /// public string DiskSize; //硬盘大小 单位:bytes /// /// IP地址 /// public string IpAddress; //计算机的IP地址 /// /// 系统当前登录用户 /// public string LoginUserName; //操作系统登录用户名 /// /// 计算机名 /// public string ComputerName; //计算机名 /// /// 操作系统架构 /// public string SystemType; //系统类型 /// /// 物理内存,单位MB /// public string TotalPhysicalMemory; //总共的内存 单位:M private static WindowsServer _instance; /// /// 获取实例 /// public static WindowsServer Instance => _instance ??= new WindowsServer(); /// /// 构造函数 /// public WindowsServer() { var cpuInfo = SystemInfo.GetCpuInfo(); CpuId = cpuInfo[0].DeviceID; CpuCount = cpuInfo.Count; CpuMhz = cpuInfo.Select(c => c.CurrentClockSpeed).ToArray(); MacAddress = SystemInfo.GetMacAddress()[0]; DiskId = GetDiskID(); DiskSize = GetSizeOfDisk(); IpAddress = SystemInfo.GetLocalUsedIP().ToString(); LoginUserName = GetUserName(); SystemType = GetSystemType(); TotalPhysicalMemory = GetTotalPhysicalMemory(); ComputerName = GetComputerName(); } /// /// 获取磁盘大小 /// /// public static string GetSizeOfDisk() { using var mc = new ManagementClass("Win32_DiskDrive"); using var moc = mc.GetInstances(); foreach (var m in moc) { using (m) { return m.Properties["Size"].Value.ToString(); } } return "-1"; } private string GetDiskID() { try { //获取硬盘ID using var mc = new ManagementClass("Win32_DiskDrive"); using var moc = mc.GetInstances(); foreach (ManagementObject o in moc) { using (o) { return (string)o.Properties["Model"].Value; } } return Empty; } catch { return "unknow "; } } /// /// 操作系统的登录用户名 /// /// private string GetUserName() { try { using var mc = new ManagementClass("Win32_ComputerSystem"); using var moc = mc.GetInstances(); foreach (ManagementObject o in moc) { using (o) { return o["UserName"].ToString(); } } return Empty; } catch { return "unknow "; } } private string GetSystemType() { try { using var mc = new ManagementClass("Win32_ComputerSystem"); using var moc = mc.GetInstances(); foreach (ManagementObject o in moc) { using (o) { return o["SystemType"].ToString(); } } return Empty; } catch { return "unknow "; } } private string GetTotalPhysicalMemory() { try { using var mc = new ManagementClass("Win32_ComputerSystem"); using var moc = mc.GetInstances(); foreach (ManagementObject o in moc) { using (o) { return o["TotalPhysicalMemory"].ToString(); } } return Empty; } catch { return "unknow "; } } private string GetComputerName() { try { return Environment.GetEnvironmentVariable("ComputerName"); } catch { return "unknow "; } } } }