【文章标题】: 设备管理01
【文章作者】: 有酒醉
【作者邮箱】: wuqr32@sina.com
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、前言
WMI是一种管理技术,用于访问您的计算机系统.WMI的最大优点是对象管理器实现了它自己的轮循机制,如果我们想接收通知,如CPU利用率
是否非常高,可用磁盘空间是否下降太快,等等.这些都可以告知对象管理器,它将处理后续的所有事情,并在需要的时产生通知.
二、WMI关键的几个类(参阅MSDN)
ManagementObject 或 ManagementClass:分别为单个管理对象或类。
ManagementObjectSearcher:用于根据指定的查询或枚举检索 ManagementObject 或 ManagementClass 对象的集合。
ManagementEventWatcher:用于预订来自 WMI 的事件通知。
ManagementQuery:用作所有查询类的基础。
三、使用WMI与计算机交互
示例 -- 查询机器处理器信息
// Author by Yzl
using System;
using System.Management;
public class ProcessorInfo
...{
public static void Main(string[] args)
...{
ManagementClass processorCls = new ManagementClass("Win32_Processor");
// 罗列CPU处理器的信息
foreach(ManagementObject processorObj in processorCls.GetInstances())
...{
Console.WriteLine("Processor Id:"+processorObj["ProcessorId"]);
Console.WriteLine("Processor Name:" + processorObj["Name"]);
Console.WriteLine("Current Clock Speed:" + processorObj["CurrentClockSpeed"]);
}
}
}
如果要查阅远程计算机的处理器信息,可以做如下更改:
ConnectionOptions connection = new ConnectionOptions();
connection.Username = "user";
connection.Password = "password";
ManagementScope scope = new ManagementScope("////RemoteComputerName//root//CIMV2", connection);
scope.Connect();
ManagementPath p = new ManagementPath("Win32_Processor");
ObjectGetOptions o = new ObjectGetOptions(null, true);
ManagementClass c = new ManagementClass(s, p, o);
查阅其他信息参阅Win32_Processor结构
...{
uint16 AddressWidth;
uint16 Architecture;
uint16 Availability;
string Caption;
uint32 ConfigManagerErrorCode;
boolean ConfigManagerUserConfig;
uint16 CpuStatus;
string CreationClassName;
uint32 CurrentClockSpeed;
uint16 CurrentVoltage;
uint16 DataWidth;
string Description;
string DeviceID;
boolean ErrorCleared;
string ErrorDescription;
uint32 ExtClock;
uint16 Family;
datetime InstallDate;
uint32 L2CacheSize;
uint32 L2CacheSpeed;
uint32 LastErrorCode;
uint16 Level;
uint16 LoadPercentage;
string Manufacturer;
uint32 MaxClockSpeed;
string Name;
string OtherFamilyDescription;
string PNPDeviceID;
uint16 PowerManagementCapabilities[];
boolean PowerManagementSupported;
string ProcessorId;
uint16 ProcessorType;
uint16 Revision;
string Role;
string SocketDesignation;
string Status;
uint16 StatusInfo;
string Stepping;
string SystemCreationClassName;
string SystemName;
string UniqueId;
uint16 UpgradeMethod;
string Version;
uint32 VoltageCaps;
};
示例 -- 查询驱动器信息
// Author by Yzl
using System;
using System.Management;
public class DriverInfo
...{
public static void Main(string[] args)
...{
ManagementClass driverCls = new ManagementClass("Win32_LogicalDisk");
// 罗列驱动器的信息
foreach(ManagementObject driverObj in driverCls.GetInstances())
...{
Console.Write(driverObj["Description"]+" "+driverObj["DeviceID"]);
Console.WriteLine();
if (driverObj["Size"] != null)
...{
Console.WriteLine("总空间:" +
double.Parse(driverObj["Size"].ToString())/1024/1024/1024 + "GB");
Console.WriteLine("剩余空间:" +
double.Parse(driverObj["FreeSpace"].ToString())/1024/1024/1024 + "GB");
}
Console.WriteLine();
}
}
}
我的机器下运行结果:
本地固定磁盘 C:
总空间:9.76696395874023GB
剩余空间:0.94287109375GB
本地固定磁盘 D:
总空间:14.6466331481934GB
剩余空间:2.65357208251953GB
本地固定磁盘 E:
总空间:19.5339584350586GB
剩余空间:14.6205635070801GB
本地固定磁盘 F:
总空间:30.5495986938477GB
剩余空间:10.0165901184082GB
CD-ROM 磁盘 G:
E:/>
其他示例我集中一下:
// OracleLinstenerStart.cs
using System;
using System.Management;
public class OracleLinstenerStart
...{
public void Main(string[] args)
...{
ManagementObject OracleLinstenerObject = new ManagementObject(@"rootcimv2",
"Win32_Service.Name='OracleoracleTNSListener'",null);
ManagementBaseObject outObject = OracleLinstenerObject.InvokeMethod("StartService",null,null);
int iRet = int.Parse(outObject["returnValue"].ToString());
switch(iRet)
...{
case 0:Console.WriteLine("Oralce Linstener服务正常启动.");break;
case 10:Console.WriteLine("Oralce Linstener服务已经启动.");break;
default:
Console.WriteLine("其他原因,请参照MSDN");break;
}
}
}
// 查找当前正在运行的进程
// ProcessLookup.cs
public class ProcessLookup
...{
public static void Main(string[] args)
...{
ManagementObject xdictObject = null;
ManagementClass processClass = new ManagementClass("Win32_Process");
foreach(ManagementObject mObject in processClass.GetInstances())
...{
// 罗列当前进程信息
Console.WriteLine(mObject["Name"]+" "+mObject["ProcessId"]);
if (mObject["Name"].ToString() == "xdict.exe")
...{
xdictObject = mObject;
}
}
// 关闭金山词霸
if (xdictObject == null)
...{
Console.WriteLine("未找到该进程");
return;
}
object o = xdictObject.InvokeMethod("Terminate",new Object[]...{0});
int iRet = int.Parse(o.ToString());
switch(iRet)
...{
case 0:Console.WriteLine("金山词霸正常关闭");break;
case 2:Console.WriteLine("访问拒绝");break;
case 3:Console.WriteLine("权限不足");break;
case 8:Console.WriteLine("未知错误");break;
case 9:Console.WriteLine("路径未找到");break;
case 21:Console.WriteLine("无效参数");break;
}
}
}
// 查看系统的驱动和文件共享
// DocShare.cs
public class DocShare
...{
public static void Main(string[] args)
...{
}
}
<续>
--------------------------------------------------------------------------------
【版权声明】: 本文原创于泉州软件基地, 转载请注明作者并保持文章的完整, 谢谢!
2007年03月11日 15:27:04