using System; using System.Diagnostics; using System.Management; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading; using static System.String; namespace Masuit.Tools.Win32 { /// /// Windows系统的系列方法 /// public static class Windows { /// /// 获取当前使用的IP /// /// public static string GetLocalUsedIP() { string result = RunApp("route", "print", true); Match m = Regex.Match(result, @"0.0.0.0\s+0.0.0.0\s+(\d+.\d+.\d+.\d+)\s+(\d+.\d+.\d+.\d+)"); if (m.Success) { return m.Groups[2].Value; } try { string ip; using (System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient()) { c.Connect("www.baidu.com", 80); ip = ((IPEndPoint)c.Client.LocalEndPoint).Address.ToString(); } return ip; } catch (Exception) { return null; } } /// /// 运行一个控制台程序并返回其输出参数。 /// /// 程序名 /// 输入参数 /// 是否在控制台输出日志 /// public static string RunApp(string filename, string arguments, bool recordLog) { try { if (recordLog) { Trace.WriteLine(filename + " " + arguments); } Process proc = new Process { StartInfo = { FileName = filename, CreateNoWindow = true, Arguments = arguments, RedirectStandardOutput = true, UseShellExecute = false } }; proc.Start(); using (System.IO.StreamReader sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default)) { //上面标记的是原文,下面是我自己调试错误后自行修改的 Thread.Sleep(100); //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行 //txt = sr.ReadToEnd()了,导致返回的数据为空,故睡眠令硬件反应 if (!proc.HasExited) //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行 { //txt = sr.ReadToEnd()程序就在等待输入,而且又无法输入,直接掐住无法继续运行 proc.Kill(); } string txt = sr.ReadToEnd(); if (recordLog) Trace.WriteLine(txt); return txt; } } catch (Exception ex) { Trace.WriteLine(ex); return ex.Message; } } } /// /// 服务器信息 /// 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 { get { if (_instance == null) _instance = new WindowsServer(); return _instance; } } /// /// 构造函数 /// public WindowsServer() { CpuId = GetCpuID(); CpuCount = GetCpuCount(); CpuMhz = GetCpuMHZ(); MacAddress = GetMacAddress(); DiskId = GetDiskID(); DiskSize = GetSizeOfDisk(); IpAddress = GetIPAddress(); LoginUserName = GetUserName(); SystemType = GetSystemType(); TotalPhysicalMemory = GetTotalPhysicalMemory(); ComputerName = GetComputerName(); } string GetCpuID() { try { //获取CPU序列号代码 string cpuInfo = " "; //cpu序列号 using (var mc = new ManagementClass("Win32_Processor")) { foreach (ManagementObject mo in mc.GetInstances()) { using (mo) { cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); } } } return cpuInfo; } catch { return "unknow "; } } /// /// 获取CPU个数 /// /// public static int GetCpuCount() { try { using (var mCpu = new ManagementClass("Win32_Processor")) { using (ManagementObjectCollection cpus = mCpu.GetInstances()) { return cpus.Count; } } } catch { // ignored } return -1; } /// /// 获取CPU主频 /// /// public static string[] GetCpuMHZ() { using (var mc = new ManagementClass("Win32_Processor")) { using (ManagementObjectCollection cpus = mc.GetInstances()) { var mhz = new string[cpus.Count]; int c = 0; using (var mySearch = new ManagementObjectSearcher("select * from Win32_Processor")) { foreach (ManagementObject mo in mySearch.Get()) { using (mo) { mhz[c] = mo.Properties["CurrentClockSpeed"].Value.ToString(); c++; } } } return mhz; } } } /// /// 获取磁盘大小 /// /// public static string GetSizeOfDisk() { using (var mc = new ManagementClass("Win32_DiskDrive")) { foreach (ManagementObject m in mc.GetInstances()) { using (m) { return m.Properties["Size"].Value.ToString(); } } } return "-1"; } string GetMacAddress() { try { //获取网卡硬件地址 string mac = " "; using (var mc = new ManagementClass("Win32_NetworkAdapterConfiguration")) { foreach (ManagementObject mo in mc.GetInstances()) { using (mo) { if ((bool)mo["IPEnabled"]) { mac = mo["MacAddress"].ToString(); break; } } } } return mac; } catch { return "unknow "; } } string GetIPAddress() { try { //获取IP地址 string st = Empty; using (var mc = new ManagementClass("Win32_NetworkAdapterConfiguration")) { foreach (ManagementObject mo in mc.GetInstances()) { using (mo) { if ((bool)mo["IPEnabled"]) { //st=mo[ "IpAddress "].ToString(); Array ar; ar = (Array)(mo.Properties["IpAddress"].Value); st = ar.GetValue(0).ToString(); break; } } } } return st; } catch { return "unknow "; } } string GetDiskID() { try { //获取硬盘ID string hdid = Empty; using (var mc = new ManagementClass("Win32_DiskDrive")) { foreach (ManagementObject mo in mc.GetInstances()) { using (mo) { hdid = (string)mo.Properties["Model"].Value; } } } return hdid; } catch { return "unknow "; } } /// /// 操作系统的登录用户名 /// /// string GetUserName() { try { string st = Empty; using (var mc = new ManagementClass("Win32_ComputerSystem")) { foreach (ManagementObject mo in mc.GetInstances()) { using (mo) { st = mo["UserName"].ToString(); } } } return st; } catch { return "unknow "; } } string GetSystemType() { try { string st = Empty; using (var mc = new ManagementClass("Win32_ComputerSystem")) { foreach (var o in mc.GetInstances()) { using (o) { var mo = (ManagementObject)o; st = mo["SystemType"].ToString(); } } } return st; } catch { return "unknow "; } } string GetTotalPhysicalMemory() { try { string st = Empty; using (var mc = new ManagementClass("Win32_ComputerSystem")) { using (ManagementObjectCollection moc = mc.GetInstances()) { foreach (var o in moc) { var mo = (ManagementObject)o; st = mo["TotalPhysicalMemory"].ToString(); } } } return st; } catch { return "unknow "; } } string GetComputerName() { try { return Environment.GetEnvironmentVariable("ComputerName"); } catch { return "unknow "; } } } }