using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace Container.Common
{
class DeviceInfo
{
///
/// 获取硬盘容量
///
public string GetDiskSize()
{
string result = string.Empty;
StringBuilder sb = new StringBuilder();
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString());
sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+");
}
result = sb.ToString().TrimEnd('+');
}
catch
{
}
return result;
}
}
public class CommonUtlity
{
///
/// 将字节转换为GB
///
/// 字节值
/// 除数,硬盘除以1000,内存除以1024
///
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];
}
}
///
/// windows api 名称
///
public enum WindowsAPIType
{
///
/// 内存
///
Win32_PhysicalMemory,
///
/// cpu
///
Win32_Processor,
///
/// 硬盘
///
win32_DiskDrive,
///
/// 电脑型号
///
Win32_ComputerSystemProduct,
///
/// 分辨率
///
Win32_DesktopMonitor,
///
/// 显卡
///
Win32_VideoController,
///
/// 操作系统
///
Win32_OperatingSystem
}
public enum WindowsAPIKeys
{
///
/// 名称
///
Name,
///
/// 显卡芯片
///
VideoProcessor,
///
/// 显存大小
///
AdapterRAM,
///
/// 分辨率宽
///
ScreenWidth,
///
/// 分辨率高
///
ScreenHeight,
///
/// 电脑型号
///
Version,
///
/// 硬盘容量
///
Size,
///
/// 内存容量
///
Capacity,
///
/// cpu核心数
///
NumberOfCores
}
///
/// 电脑信息类 单例
///
public class Computer
{
private static Computer _instance;
private static readonly object _lock = new object();
//private Computer()
//{ }
//public static Computer CreateComputer()
//{
// if (_instance == null)
// {
// lock (_lock)
// {
// if (_instance == null)
// {
// _instance = new Computer();
// }
// }
// }
// return _instance;
//}
///
/// 查找cpu的名称,主频, 核心数
///
///
public Tuple GetCPU()
{
Tuple result = null;
try
{
string str = string.Empty;
ManagementClass mcCPU = new ManagementClass(WindowsAPIType.Win32_Processor.ToString());
ManagementObjectCollection mocCPU = mcCPU.GetInstances();
foreach (ManagementObject m in mocCPU)
{
string name = m[WindowsAPIKeys.Name.ToString()].ToString();
string[] parts = name.Split('@');
result = new Tuple(parts[0].Split('-')[0] + "处理器", parts[1]);
break;
}
}
catch
{
}
return result;
}
///
/// 获取cpu核心数
///
///
public string GetCPU_Count()
{
string str = "查询失败";
try
{
int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from " +
WindowsAPIType.Win32_Processor.ToString()).Get())
{
coreCount += int.Parse(item[WindowsAPIKeys.NumberOfCores.ToString()].ToString());
}
if (coreCount == 2)
{
return "双核";
}
str = coreCount.ToString() + "核";
}
catch
{
}
return str;
}
///
/// 获取系统内存大小
///
/// 内存大小(单位M)
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 CommonUtlity.ToGB((double)capacity, 1024.0);
}
///
/// 获取硬盘容量
///
public string GetDiskSize()
{
string result = string.Empty;
StringBuilder sb = new StringBuilder();
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString());
sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+");
}
result = sb.ToString().TrimEnd('+');
}
catch
{
}
return result;
}
///
/// 电脑型号
///
public string GetVersion()
{
string str = "查询失败";
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_ComputerSystemProduct.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
str = m[WindowsAPIKeys.Version.ToString()].ToString(); break;
}
}
catch
{
}
return str;
}
///
/// 获取分辨率
///
public string GetFenbianlv()
{
string result = "1920*1080";
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_DesktopMonitor.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
result = m[WindowsAPIKeys.ScreenWidth.ToString()].ToString() + "*" +
m[WindowsAPIKeys.ScreenHeight.ToString()].ToString();
break;
}
}
catch
{
}
return result;
}
///
/// 显卡 芯片,显存大小
///
public Tuple GetVideoController()
{
Tuple result = null;
try
{
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
result = new Tuple(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString()
.Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0));
break;
}
}
catch
{
}
return result;
}
///
/// 操作系统版本
///
public string GetOS_Version()
{
string str = "Windows 10";
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_OperatingSystem.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
str = m[WindowsAPIKeys.Name.ToString()].ToString().Split('|')[0].Replace("Microsoft", "");
break;
}
}
catch
{
}
return str;
}
[DllImport("Kernel32.dll")]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_INFO
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}
MEMORY_INFO MemInfo = new MEMORY_INFO();
///
/// 获取当前CPU温度、内存使用率
///
public string GetNow_WindowsState()
{
string str = "";
Double CPUtprt = 0;
ManagementObjectSearcher mos = new ManagementObjectSearcher(@"root\WMI", @"Select * From MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject mo in mos.Get())
{
CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;
}
str = "CPU温度:" + CPUtprt.ToString() + "℃ 内存使用率:" + MemInfo.dwMemoryLoad.ToString() + "%";
return str;
}
///
/// 获取当前Windows版本、序列号
///
public string WindowsInfo()
{
RegistryKey rk;
rk = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows NT\\CurrentVersion");
string s = "";
if (rk.GetValue("ProductName") != null)
{
s = "当前操作系统版本:" + rk.GetValue("ProductName").ToString();
}
else
return "";
if (rk.GetValue("CSDVersion") != null)
{
s = s + "\r\n" + rk.GetValue("CSDVersion").ToString();
}
if (rk.GetValue("ProductId") != null)
{
s = s + "\r\n当前操作系统安装序列号:\r\n" + rk.GetValue("ProductId").ToString();
}
if (rk.GetValue("CurrentBuildNumber") != null)
{
s = s + "\r\n当前系统版本号:" + rk.GetValue("CurrentBuildNumber").ToString();
}
rk.Close();
return s;
}
///
/// 获取操作系统位数(x32/64)
///
/// int
public static int GetOSBit()
{
try
{
string addressWidth = String.Empty;
ConnectionOptions mConnOption = new ConnectionOptions();
ManagementScope mMs = new ManagementScope(@"\\localhost", mConnOption);
ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor");
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery);
ManagementObjectCollection mObjectCollection = mSearcher.Get();
foreach (ManagementObject mObject in mObjectCollection)
{
addressWidth = mObject["AddressWidth"].ToString();
}
return Int32.Parse(addressWidth);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return 32;
}
}
string GetWindowsLanguage()
{
string lg = "";
int lcid = System.Globalization.CultureInfo.CurrentCulture.LCID;
string LanguageName = System.Globalization.CultureInfo.CurrentCulture.NativeName;
string LangName = System.Globalization.RegionInfo.CurrentRegion.NativeName;
System.Console.WriteLine("Lcid:" + lcid.ToString());
lg = "Lcid:" + lcid.ToString();
System.Console.WriteLine("区域语言:" + LanguageName);
lg += "区域语言:" + LanguageName;
System.Console.WriteLine("区域语言2:" + LangName);
lg += "区域语言2:" + LangName;
return lg;
//try
//{
// Process MyProcess = new Process();
// //设定程序名
// MyProcess.StartInfo.FileName = "cmd.exe";
// //关闭Shell的使用
// MyProcess.StartInfo.UseShellExecute = false;
// //重定向标准输入
// MyProcess.StartInfo.RedirectStandardInput = true;
// //重定向标准输出
// MyProcess.StartInfo.RedirectStandardOutput = true;
// //重定向错误输出
// MyProcess.StartInfo.RedirectStandardError = true;
// //设置不显示窗口
// MyProcess.StartInfo.CreateNoWindow = true;
// MyProcess.StartInfo.Arguments = "/c C:\\Windows\\System32\\cmd.exe";
// string cmdtext = string.Empty;
// cmdtext = "slmgr.vbs /xpr" ; //关机
// Console.WriteLine(cmdtext);
// //执行VER命令
// MyProcess.Start();
// MyProcess.StandardInput.WriteLine(cmdtext);
// //MessageBox.Show(MyProcess.StandardOutput.ReadToEnd());
// //MessageBox.Show(MyProcess.StandardError.ReadToEnd());
// string output = "";
// char[] outl = new char[2048];
// string error = "";
// using (System.IO.StreamReader myOutput = MyProcess.StandardOutput)
// {
// myOutput.Read(outl, 0, 2048);
// output = new string(outl);
// log.WriteLogFile(output, "cmdexelog");
// }
// using (System.IO.StreamReader myError = MyProcess.StandardError)
// {
// myError.Read(outl, 0, 1024);
// error = new string(outl);
// log.WriteLogFile(error, "cmdexelog");
// }
// }
// }
//}
//catch (Exception ex)
//{
// log.WriteLogFile(ex.ToString());
//}
}
}
}