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
}
}