C#操作WMI实例

今天本来想获取机器的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
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值