c#與WMI使用技巧集
更新時(shí)間:2007年03月09日 00:00:00 作者:
獲取CPU序列號(hào)代碼
string cpuInfo = "";//cpu序列號(hào)
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].value.ToString();
Console.WriteLine(cpuInfo);
Console.ReadLine();
}
獲取網(wǎng)卡硬件地址
using System.Management;
...
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
Console.WriteLine("MAC address\t{0}", mo["MacAddress"].ToString());
mo.Dispose();
}
}
獲取硬盤ID
String HDid;
ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
HDid = (string)mo.Properties["Model"].value;
MessageBox.Show(HDid );
}
16、在.NET中輕松獲取系統(tǒng)信息(1) -WMI篇
Montaque
申明:
1、個(gè)人的一點(diǎn)心得,僅供參考
2、轉(zhuǎn)載時(shí)候,請(qǐng)保留原本。
概述:
不知道大家有沒有這種體會(huì)?有時(shí)候?yàn)榱双@取系統(tǒng)一點(diǎn)點(diǎn)信息,比如考慮一下操作系統(tǒng)的版本號(hào),或者當(dāng)前屏幕的分辨率。其實(shí)說到底就是讀操作系統(tǒng)某個(gè)方面的一個(gè)屬性值而已,然后就看到我們的程序中密密麻麻的Win32 API申明,調(diào)用,代碼的可讀性和維護(hù)性不言而喻。到了.NET,微軟提供了更為豐富的類,有很多以前要調(diào)用API的方法可以在.NET中輕而易舉的調(diào)用實(shí)現(xiàn)。今天簡(jiǎn)單介紹一個(gè)在.NET中如何通過與WMI(Windows 管理規(guī)范)的通訊,從而得到獲取信息的目的。
主要思路:
舉一個(gè)獲取操作系統(tǒng)共享目錄和獲取主板號(hào)的例子,介紹如何利用System.Managment下面的類獲取系統(tǒng)相關(guān)的信息:
正文:
WMI(Windows管理規(guī)范:Windows Management Instrumentation)是Microsoft基于Web的企業(yè)管理(WBEM)的實(shí)現(xiàn),同時(shí)也是一種基于標(biāo)準(zhǔn)的系統(tǒng)管理接口。WMI最早出現(xiàn)在Microsoft Windows 2000系統(tǒng)上,但它同樣可以安裝在Windows NT 4和Windows 9x計(jì)算機(jī)上。WMI是一種輕松獲取系統(tǒng)信息的強(qiáng)大工具。
在.NET中,有一個(gè)System.Management名空間(系統(tǒng)默認(rèn)沒有引用,我們可以手動(dòng)添加引用),通過下面的Class的操作,可以查詢系統(tǒng)軟硬件的信息,先看一個(gè)簡(jiǎn)單的例子:
Imports System.Management
Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_share")
Dim share As ManagementObject
For Each share In searcher.Get()
MessageBox.Show(share.GetText(TextFormat.Mof))
Next share
運(yùn)行的結(jié)果是列出了所有系統(tǒng)當(dāng)前共享的目錄、以及描述等等。
分析一下上面的代碼,可以看到一下幾點(diǎn):
1、似乎是在進(jìn)行數(shù)據(jù)庫(kù)操作,有點(diǎn)像SQL語句。其實(shí)就是SQL操作,這種語句被成WQL(WMI Query Language),實(shí)際上是標(biāo)準(zhǔn)SQL的一個(gè)子集加上了WMI的擴(kuò)展.
2、WQL是個(gè)只讀的查詢語言,我們只能查詢響應(yīng)的數(shù)據(jù),不能用UPDATE,INSERT等更新操作
3、代碼很簡(jiǎn)單、通俗易懂
4、我們采用了一種MOF(托管對(duì)象格式)的顯示。
例子二:獲取當(dāng)前主板的信息
上面的例子是一個(gè)軟件方面的信息,下面看一個(gè)獲取硬件信息的例子,獲取主板的序列號(hào)以及制造商:
Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")
Dim share As ManagementObject
For Each share In searcher.Get()
Debug.WriteLine("主板制造商:" & share("Manufacturer"))
Debug.WriteLine("型號(hào):" & share("Product"))
Debug.WriteLine("序列號(hào):" & share("SerialNumber"))
Next share
總結(jié)以及補(bǔ)充:
WMI類也是分層次的,具體可以參考msdn中的WMI;轉(zhuǎn)向.NET平臺(tái)開發(fā)的時(shí)候,最好能多看一些關(guān)于.NET新特性的介紹,這樣可以大幅度的提升代碼的開發(fā)效率以及運(yùn)行效率。
相關(guān)文章
C#數(shù)據(jù)庫(kù)操作類AccessHelper實(shí)例
這篇文章主要介紹了C#數(shù)據(jù)庫(kù)操作類AccessHelper實(shí)例,可實(shí)現(xiàn)針對(duì)access數(shù)據(jù)庫(kù)的各種常見操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10C#如何安全、高效地玩轉(zhuǎn)任何種類的內(nèi)存之Span的本質(zhì)
為什么要使用指針,什么時(shí)候需要使用它,以及如何安全、高效地使用它?本文將講清楚 What、How 和 Why ,讓你知其然,更知其所以然2021-08-08C#實(shí)現(xiàn)文件與二進(jìn)制互轉(zhuǎn)并存入數(shù)據(jù)庫(kù)
這篇文章主要介紹了C#實(shí)現(xiàn)文件與二進(jìn)制互轉(zhuǎn)并存入數(shù)據(jù)庫(kù),本文直接給出代碼實(shí)例,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06C#實(shí)現(xiàn)把指定數(shù)據(jù)寫入串口
這篇文章主要介紹了C#實(shí)現(xiàn)把指定數(shù)據(jù)寫入串口,直接給出示例代碼,需要的朋友可以參考下2015-06-06c#模擬js escape方法的簡(jiǎn)單實(shí)例
這篇文章主要介紹了c#模擬js escape方法的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-11-11