WMI---Function---Helper

本文介绍如何使用Windows Management Instrumentation (WMI) 来获取系统信息,包括磁盘容量、共享资源管理、服务状态、创建新进程等,并展示了如何读取硬件如网卡MAC地址、CPU序列号及主板信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace WMIClass
{
    public class WMIHelper
    {
        #region 1.如何用WMI获得指定磁盘的容量

        /// <summary>
        /// Format Size
        /// </summary>
        /// <param name="size"></param>
        /// <returns></returns>
        private static string GetSizeUseUnit(string size)
        {
            double dSpace = Convert.ToDouble(size);
            string sSpace = dSpace.ToString("N");
            string[] tmp;
            string rtnSize = "0";
            tmp = sSpace.Split(',');
            switch (tmp.GetUpperBound(0))
            {
                case 0:
                    rtnSize = tmp[0] + "bytes";
                    break;
                case 1:
                    rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " K";
                    break;
                case 2:
                    rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " M";
                    break;
                case 3:
                    rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " G";
                    break;
                case 4:
                    rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " T";
                    break;
            }
            return rtnSize;
        }
        private static string DriveType(string type)
        {
            string rtntype="";
            switch (type)
            {
                case "1":
                    rtntype="Not Type";
                    break;
                case "2":
                    rtntype="Floppy disk";
                    break;
                case "3":
                    rtntype="Hard disk";
                    break;
                case "4":
                    rtntype="Removable drive or network drive";
                    break;
                case "5":
                    rtntype="CD-ROM";
                    break;
                case "6":
                    rtntype="RAM disk";
                    break;
                default :
                    break;
            }
            return rtntype;
        }
        private static bool IsExistProperty(ManagementObject mo, string propertyName)
        {
            bool flag = false;
            foreach (PropertyData pd in mo.Properties)
            {
                if (pd.Name.ToLower().Equals(propertyName.ToLower()) && mo[propertyName] != null)
                {
                    flag = true;
                    break;
                }
            }
            return flag;
        }

        public static string GetDiskInfo()
        {
            string rtnStr = string.Empty;
            SelectQuery query = new SelectQuery("select * from Win32_LogicalDisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection mc = searcher.Get();

            foreach (ManagementObject disk in mc)
            {
                rtnStr += string.Format("{0} {1} {2} {3}/r/n",
                    IsExistProperty(disk,"Name")?disk["Name"]:"not found",
                    IsExistProperty(disk,"DriveType")?DriveType(disk["DriveType"].ToString()):"not found",
                    IsExistProperty(disk,"VolumeName")?disk["VolumeName"]:"not found",
                    IsExistProperty(disk,"Size")?GetSizeUseUnit(disk["Size"].ToString()):"not found"
                    );
            }

            return rtnStr;
        }

        public static string GetSingleDiskInfo()
        {
            string rtnStr = string.Empty;
            ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=/"c:/"");
            disk.Get();
            rtnStr += string.Format("{0} {1} {2} {3}/r/n",
                    IsExistProperty(disk, "Name") ? disk["Name"] : "not found",
                    IsExistProperty(disk, "DriveType") ? DriveType(disk["DriveType"].ToString()) : "not found",
                    IsExistProperty(disk, "VolumeName") ? disk["VolumeName"] : "not found",
                    IsExistProperty(disk, "Size") ? GetSizeUseUnit(disk["Size"].ToString()) : "not found"
                    );
            return rtnStr;
        }
        #endregion

        #region 如何列出系统中所以的共享资源
        public static string GetAllShareResource()
        {
            string rtnStr = string.Empty;
            ManagementObjectSearcher seacher = new ManagementObjectSearcher("select * from win32_share");
            foreach (ManagementObject share in seacher.Get())
            {
                rtnStr += share.GetText(TextFormat.Mof) + "/r/n"; ;
            }
            return rtnStr;
        }
        #endregion

        #region 怎样写程控制让系统中的某个文件夹共享或取消共享
        public static bool CreateShare()
        {
            //uint32 Create(
            //  [in]  string Path,
            //  [in]  string Name,
            //  [in]  uint32 Type,
            //  [in]  uint32 MaximumAllowed,
            //  [in]  string Description,
            //  [in]  string Password,
            //  [in]  Win32_SecurityDescriptor Access
            //);

            bool flag = false;
            /**//*首先,这需要以有相应权限的用户登录系统才行
            将
            object[] obj = {"C://Temp","我的共享",0,10,"Dot Net 实现的共享",""};
            改为
            object[] obj = {"C://Temp","我的共享",0,null,"Dot Net 实现的共享",""};
            就可以实现授权给最多用户了。
            */
            try
            {
                ManagementClass _class = new ManagementClass(new ManagementPath("Win32_Share"));
                object[] obj = { "E://NpConcierge", "我的共享", 0, 10, "Dot Net 实现的共享", "" };
                UInt32 rtnValue = (UInt32)_class.InvokeMethod("create", obj);
                if(rtnValue==0)
                    flag = true;
            }
            catch (Exception ex)
            {

            }

            return flag;
        }

        public static bool DeleteShare()
        {
            //uint32 Delete();
            bool flag = false;

            try
            {
                SelectQuery query = new SelectQuery("select * from Win32_Share where Path=/"E:////NpConcierge/"");
                ManagementObjectSearcher seacher = new ManagementObjectSearcher(query);
                ManagementObjectCollection moc = seacher.Get();
                foreach (ManagementObject share in moc)
                {
                    share.Delete();
                }
                flag = true;
            }
            catch (Exception ex)
            {

            }

            return flag;
        }
        #endregion

        #region 5.如何获得系统服务的运行状态
        public static string GetServicesInfo()
        {
            string rtnStr = string.Empty;
            string[] serviceDatas = new string[4];

            SelectQuery query = new SelectQuery("select * from win32_service");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection moc = searcher.Get();

            foreach (ManagementObject service in moc)
            {
                serviceDatas[0] = IsExistProperty(service, "Name") ? service["Name"].ToString() : "not found";
                serviceDatas[1] = IsExistProperty(service, "StartMode") ? service["StartMode"].ToString() : "not found";
                if (service["Started"].Equals(true))
                    serviceDatas[2] = "Started";
                else
                    serviceDatas[2] = "Stop";
                serviceDatas[3] = IsExistProperty(service, "StartName") ? service["StartName"].ToString() : "not found";

                rtnStr += serviceDatas[0] + " " + serviceDatas[1] + " " + serviceDatas[2] + " " + serviceDatas[3] + "/r/n";

            }
            return rtnStr;
        }
        #endregion

        #region 创建一个新进程
        public static string CreateNewProcess()
        {
            string rtnStr = string.Empty;
            //Get the object on which the method will be invoked
            ManagementClass processClass = new ManagementClass("Win32_Process");
           // //Get an input parameters object for this method
           // ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
           // //Fill in input parameter values
           // inParams["CommandLine"] = "calc.exe";
           // //Execute the method
           // ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);

           // //Display results
           ////Note: The return code of the method is provided in the "returnvalue" property of the outParams object
           // rtnStr +="Creation of calculator process returned: " + outParams["returnvalue"];
           // rtnStr +="Process ID: " + outParams["processId"];

            object[] paras=new object[4];
            paras[0] = "calc.exe";
            paras[1] = null;
            paras[2] = null;
            paras[3] = null;
            UInt32 returnValue = (UInt32)processClass.InvokeMethod("Create",paras);

            rtnStr += "Creation of calculator process returned: " + returnValue;
            rtnStr += "Process ID: " + paras[3];
            return rtnStr;

        }
        #endregion

        #region 网卡的MAC地址
        public static string GetNetCardMAC()
        {
            string rtnStr = string.Empty;

            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach(ManagementObject mo in moc)
            {
                if((bool)mo["IPEnabled"] == true)
                    rtnStr +="MAC address"+mo["MacAddress"].ToString()+"/r/n";
                mo.Dispose();
            }

            return rtnStr;
        }
        #endregion

        #region 获取CPU的序列号
        public static string GetCPUServiralNumber()
        {
            string rtnStr = string.Empty;
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                rtnStr += IsExistProperty(mo, "ProcessorId") ? mo["ProcessorId"] : "not found";
            }
            return rtnStr;
        }
        #endregion

        #region 获取主板信息
        public static string GetBaseBoardInfo()
        {
            string rtnStr = string.Empty;
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from win32_BaseBoard");
            ManagementObjectCollection moc = searcher.Get();

            foreach (ManagementObject mo in moc)
            {
                rtnStr += IsExistProperty(mo, "Manufacturer") ? mo["Manufacturer"] : "not found";
                rtnStr += IsExistProperty(mo, "Product") ? mo["Product"] : "not found";
                rtnStr += IsExistProperty(mo, "SerialNumber") ? mo["SerialNumber"] : "not found"+"/r/n";
            }

            return rtnStr;
        }
        #endregion

        #region 获取本机用户列表
        public static string GetUserList()
        {
            string rtnStr = string.Empty;

            SelectQuery query = new SelectQuery("select * from Win32_UserAccount");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            foreach (ManagementObject mo in searcher.Get())
            {
                rtnStr += IsExistProperty(mo, "Name") ? mo["Name"] : "not found" + "/r/n";
            }
            return rtnStr;
        }
        #endregion
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值