首先,什么是wmi?
wmi(windows管理架构:windows management instrumentation)是microsoft基于web的企业管理(wbem)和 desktop management task force(dmtf)工业标准的实现. 就是一种基于标准的系统管理的开发接口,这组接口用来控制管理计算机. 它提供了一种简单的方法来管理和控制系统资源.
如果你想深入了解他,可以参考micorosft platform sdk . 在这我们只是通过它实现一个简单的功能, 得到我们系统中硬盘的相关信息.
我们需要使用.net framwork里面system.management名字空间下提供的类来实现.
using system;
using system.management;
using system.collections;
using system.collections.specialized;
namespace ace_console
{
class ace_console
{
[stathread]
static void main(string[] args)
{
stringcollection propnames = new stringcollection();
managementclass driveclass = new managementclass("win32_diskdrive");
propertydatacollection props = driveclass.properties;
foreach (propertydata driveproperty in props)
{
propnames.add(driveproperty.name);
}
int idx = 0;
managementobjectcollection drives = driveclass.getinstances();
foreach (managementobject drv in drives)
{
console.writeline(" drive({0}) properties ", idx+1);
foreach (string strprop in propnames)
{
console.writeline("property: {0}, value: {1}", strprop, drv[strprop]);
}
}
}
}
}
.net framework sdk自带的帮助里有获得逻辑硬盘大小的代码:
[c#]
using system;
using system.management;
// this example demonstrates getting information about a class using the managementclass object
class sample_managementclass
{
public static int main(string[] args)
{
managementclass diskclass = new managementclass("win32_logicaldisk");
diskclass.get();
console.writeline("logical disk class has " + diskclass.properties.count + " properties");
return 0;
}
}
[vb]
imports system
imports system.management
// this example demonstrates getting information about a class using the managementclass
class sample_managementclass
overloads public shared function main(args() as string) as integer
dim diskclass as new managementclass("win32_logicaldisk")
diskclass.get()
console.writeline(("logical disk class has " & diskclass.properties.count.tostring() & " properties"))
return 0
end function
end class