今天本来想获取机器的MAC地址,结果误打误撞碰到了个WMI。就写了一个小类库,以后有机会扩展开来
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Windows.Forms;
namespace ComputerInfo
{
/// <summary>
/// WMI获取本机信息。
/// Date:2014-08-27
/// Author:feng005211
/// </summary>
public static class ComputerInfo
{
/// <summary>
/// 返回速度最快网卡的Mac
/// </summary>
/// <returns></returns>
public static string GetFastestMacAdress()
{
const int MIN_MAC_ADDR_LENGTH = 12;
string macAddress = string.Empty;
long maxSpeed = -1;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
Console.WriteLine
(
"Found MAC Address: " + nic.GetPhysicalAddress() +
" Type: " + nic.NetworkInterfaceType);
string tempMac = nic.GetPhysicalAddress().ToString();
if (nic.Speed > maxSpeed &&
!string.IsNullOrEmpty(tempMac) &&
tempMac.Length >= MIN_MAC_ADDR_LENGTH)
{
Console.WriteLine("New Max Speed = " + nic.Speed + ", MAC: " + tempMac);
maxSpeed = nic.Speed;
macAddress = tempMac;
}
}
return macAddress;
}
/// <summary>
/// 获取Mac地址(已开启的所有网卡的Mac)
/// </summary>
/// <returns></returns>
public static string GetMacAdress()
{
string macAddresses = string.Empty;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
macAddresses += nic.GetPhysicalAddress().ToString();
break;
}
}
return macAddresses;
}
#region WMI
/// <summary>
/// 获取Mac地址,通过Management类(WMI)
/// </summary>
/// <returns></returns>
public static string GetMacForManagement()
{
try
{
//获取网卡硬件地址
string mac = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
mac = mo["MacAddress"].ToString();
break;
}
}
moc = null;
mc = null;
return mac;
}
catch
{
return "null";
}
finally
{
}
}
/// <summary>
/// 获取CPU的序列号
/// </summary>
/// <returns></returns>
public static string GetCpuSerialNumber()
{
try
{
//获取CPU序列号代码
string cpuInfo = "";//cpu序列号
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
moc = null;
mc = null;
return cpuInfo;
}
catch
{
return "unknow";
}
finally
{
}
}
/// <summary>
/// 获取当前用户
/// </summary>
/// <returns></returns>
public static string GetUsername()
{
try
{
string st = "";
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
st = mo["UserName"].ToString();
}
moc = null;
mc = null;
return st;
}
catch
{
return "unknow";
}
finally
{
}
}
/// <summary>
/// 获取用户列表
/// </summary>
/// <returns></returns>
public static string[] GetUserList()
{
List<string> list = new List<string>();
try
{
ManagementClass mc = new ManagementClass("Win32_UserAccount");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
list.Add(mo["Name"].ToString());
}
return list.ToArray();
}
catch (Exception)
{
return list.ToArray();
}
}
/// <summary>
/// 获取硬盘Id
/// </summary>
/// <returns></returns>
public static string GetDiskId()
{
try
{
String HDid = "";
ManagementClass mc = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
//HDid = (string)mo.Properties["Model"].ToString();
HDid = (String)mo.Properties["Model"].Value.ToString();
}
moc = null;
mc = null;
return HDid;
}
catch
{
return "unknow";
}
finally
{
}
}
/// <summary>
/// 获取系统类型
/// </summary>
/// <returns></returns>
public static string GetSystemType()
{
try
{
string st = "";
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
st = mo["SystemType"].ToString();
}
moc = null;
mc = null;
return st;
}
catch
{
return "unknow";
}
finally
{
}
}
/// <summary>
/// 获取物理内存
/// </summary>
/// <returns></returns>
public static string GetTotalPhysicalMemory()
{
try
{
string st = "";
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
st = mo["TotalPhysicalMemory"].ToString();
}
moc = null;
mc = null;
return st;
}
catch
{
return "unknow";
}
finally
{
}
}
/// <summary>
/// 没啥用
/// </summary>
/// <returns></returns>
public static string[] GetSerialPort()
{
try
{
List<string> strs = new List<string>();
ManagementClass mc = new ManagementClass("Win32_SerialPort");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject item in moc)
{
strs.Add(item.Properties["Name"].Value.ToString());
}
moc.Dispose();
mc.Dispose();
return strs.ToArray();
}
catch
{
return null;
}
}
/// <summary>
/// 主板信息
/// </summary>
/// <returns></returns>
public static string GetBoardInof()
{
try
{
StringBuilder sb = new StringBuilder();
ManagementClass mc = new ManagementClass("Win32_BaseBoard");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject item in moc)
{
sb.Append("\r\n主板制造商:" + item["Manufacturer"] + "\r\n");
sb.Append("型号:" + item["Product"] + "\r\n");
sb.Append("序列号:" + item["SerialNumber"] + "\r\n");
}
return sb.ToString();
}
catch (Exception ex)
{
return "";
}
}
/// <summary>
/// 获取系统信息
/// </summary>
/// <returns></returns>
public static string GetSystemInof()
{
try
{
StringBuilder sb = new StringBuilder();
ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject item in moc)
{
sb.Append("\r\n操作系统:" + item["Caption"] + "\r\n");
sb.Append("版本号:" + item["Version"] + "\r\n");
sb.Append("厂商:" + item["Manufacturer"] + "\r\n");
sb.Append("计算机名:" + item["csname"] + "\r\n");
sb.Append("目录:" + item["WindowsDirectory"] + "\r\n");
}
return sb.ToString();
}
catch (Exception ex)
{
return "";
}
}
#endregion
#region check
[STAThread]
public static string[] GetInfo(string apiName)
{
var list = new List<string>();
try
{
ManagementClass mc = new ManagementClass(apiName);
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject item in moc)
{
StringBuilder sb = new StringBuilder();
sb.Append("【Name】:" + item.Properties["Manufacturer"].Value + "\n");
foreach (var prp in item.Properties)
{
sb.Append("-----------------------------------------------\r\n");
sb.Append("Name:" + prp.Name + "\r\n");
sb.Append("Origin:" + prp.Origin + "\r\n");
sb.Append("propertyValue:" + prp.Value + "\r\n");
sb.Append("propertyType:" + prp.Origin + "\r\n");
sb.Append("-----------------------------------------------\r\n\r\n");
}
list.Add(sb.ToString());
}
Clipboard.SetText(string.Join("\r\n", list.ToArray()));
return list.ToArray();
}
catch (Exception ex)
{
return new string[] { ex.ToString() };
}
}
#endregion
#region function
/// <summary>
/// 待机
/// </summary>
public static void Sleep()
{
Application.SetSuspendState(PowerState.Suspend, true, true);
}
/// <summary>
/// 重启计算机
/// </summary>
public static void Restart()
{
try
{
ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
//此句是开启特殊权限,不开启的话一些命令无法完成(e.g. 重启计算机 -_-!!!)
mc.Scope.Options.EnablePrivileges = true;
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
mo.InvokeMethod("Reboot", null, null);
}
}
catch (Exception)
{
Console.WriteLine("重启失败");
throw;
}
}
/// <summary>
/// 关闭计算机
/// </summary>
public static void Shutdown()
{
try
{
ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
//此句是开启特殊权限,不开启的话一些命令无法完成(e.g. 重启计算机 -_-!!!)
mc.Scope.Options.EnablePrivileges = true;
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
mo.InvokeMethod("ShutDown", null, null);
}
}
catch (Exception)
{
Console.WriteLine("重启失败");
throw;
}
}
#endregion
}
}