WMI 使用教程_.NET 入门教程
?WMI 使用教程_.NET 入門教程?
先介紹一下WMI 相關(guān)知識:?
什么是WMI 呢? Windows 管理規(guī)范 (Windows Management Instrumentation ),它的主要功?
能包括:訪問本地主機的一些信息和服務(wù),可以遠(yuǎn)程管理計算機(當(dāng)然你必須擁有足夠的權(quán)限)?
也就是說可以象重起,關(guān)機,關(guān)閉進(jìn)程,創(chuàng)建進(jìn)程等等!?
有了初步了解下面我門開始一些初步的工作吧:?
在這個WMI 程序中,我將實現(xiàn)四個基本功能:?
1.Explorer 類似與windows 里的資源管理器?
2.SystemInfo 查看你的硬件信息和OS 信息?
3.Services 當(dāng)前正在工作的信息?
4.Processes 當(dāng)前執(zhí)行的進(jìn)程?
(這里是可以管理遠(yuǎn)程和本地OS 的)?
好了,我們要開始實現(xiàn)訪問我們的OS 了,不過在這之前我們必須要引入System.Management?
這個命名空間?
下面讓我們了解一下控件的狀態(tài)事件?
我們必須保證是實時的所以必須在這里包涵UpdateStatus(string e)該事件(這是一個自定?
義的)?
這里主要是希望在點擊每個控件時刷新狀態(tài)欄,可以讓用戶知道程序在做什么!?
代碼事例:?
//控件代碼?
//狀態(tài)事件的代理?
public delegate void Status(string e);?
public event Status UpdateStatus;?
//這里更新狀態(tài)欄?
UpdateStatus("Hello world.");?
//這里是在主程序里的代碼?
//寫具體的事件代碼?
private void refreshStatusBar(string stringStatus)?
{?
//update status bar?
statusBarStatus.Text = stringStatus;?
}?
下面是具體代碼:?
Explorer Control?
這里首先介紹一下WMI的 Win32_LogicalDisk類(參考Platform SDK: Windows Management?
Instrumentation),通過它我們可以查看到本地驅(qū)動器?
的一些詳細(xì)情況,我們還需要用到System.Management中的兩個類
ManagementObjectSearcher?
和ManagementOjbectCollection它們的作用主要是ManagementObjectSearcher將查詢到了?
ManagementOjbectCollection該對象的集合中去(這里可以獲取的驅(qū)動器信息包括 驅(qū)動器
的名稱?
,類型,描述信息等)當(dāng)然你也可以只查看驅(qū)動器的部分信息可以在
ManagementObjectSearcher類?
的構(gòu)造函數(shù)中這樣寫ManagementObjectSearcher query = new?
ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); (參考Platform SDK:?
Windows Management Instrumentation)?
代碼如下:?
//get drive collection ??
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From?
Win32_LogicalDisk "); ??
ManagementObjectCollection queryCollection = query.Get();?
//loop throught each object to get drive information?
foreach ( ManagementObject mo in queryCollection) ??
{ ??
switch (int.Parse( mo["DriveType"].ToString())) ??
{ ??
case Removable: //removable drives ??
imageIndex = 5; ??
selectIndex = 5; ??
break; ??
case LocalDisk: //Local drives ??
imageIndex = 6; ??
selectIndex = 6; ??
break; ??
case CD: //CD rom drives ??
imageIndex = 7; ??
selectIndex = 7; ??
break; ??
case Network: //Network drives ??
imageIndex = 8; ??
selectIndex = 8; ??
break; ??
default: //defalut to folder ??
imageIndex = 2; ??
selectIndex = 3; ??
break; ??
}
//get drive name?
Console.WriteLine("Drive: " + mo["Name"].ToString()); ??
}?
SystemInfo Control?
該控件主要用來查看本地或遠(yuǎn)程主機的OS和硬件信息,這里需要用到另外兩個?
對象ConnectionOptions和ManagementScope,ConnectionOptions主要是設(shè)置?
WMI連接信息的,如用戶名和密碼,這里我們主要用到它的兩個屬性UserName和?
Password; ManagementScope對象表示W(wǎng)MI的規(guī)范,通過該規(guī)范可以訪問服務(wù)器?
和命名空間的路徑已及使用ConnectionOptions中的設(shè)置?
請看如下代碼:?
//Connect to the remote computer?
ConnectionOptions co = new ConnectionOptions();?
co.Username = textUserID.Text;?
co.Password = textPassword.Text;?
//Point to machine?
System.Management.ManagementScope ms = new?
System.Management.ManagementScope("\\\\" + ??
stringHostName + "\\root\\cimv2", co);?
現(xiàn)在我們結(jié)合剛才的知識來得到我們要的信息,但我們要得到那些我們想要信息呢??
那樣的話我們就必須要用到ObjectQuery對象,通過它我們可以得到我們想要的查詢?
信息.把ObjectQuery對象和ManagementScope對象放入ManagementObjectSearcher對象?
中這樣就可以通過我們設(shè)置好的規(guī)范和我們設(shè)置好的查詢得到我們想要的結(jié)果,當(dāng)然?
還必須要掉用ManagementObjiectSearcher的Get()方法,它會返回一個ManagementObject?
對象的集合,然后可以通過結(jié)合操作來訪問到每一個我們要的信息.?
代碼如下:?
//Query system for Operating System information?
oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");?
query = new ManagementObjectSearcher(ms,oq);?
queryCollection = query.Get();?
foreach ( ManagementObject mo in queryCollection)?
{?
//create child node for operating system?
createChildNode(nodeCollection, "Operating System: " + mo["Caption"]);?
createChildNode(nodeCollection, "Version: " + mo["Version"]);?
createChildNode(nodeCollection, "Manufacturer : " + mo["Manufacturer"]);?
createChildNode(nodeCollection, "Computer Name : " +mo["csname"]);
createChildNode(nodeCollection, "Windows Directory : " + mo["WindowsDirectory"]);?
}?
?
要是你只是希望查看到本地主機的信息,你就沒必要去創(chuàng)建 ConnectionOption,?
ManagementScope,ObjectQuery 對象,你僅僅只需要把ManagementObjectSearcher?
對象的結(jié)果在ManagementObjectCollection集合里去調(diào)用Get()方法既可.?
代碼如下:?
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From?
Win32_OperatingSystem");?
ManagementObjectCollection queryCollection = query.Get();?
這里只是介紹了OS信息的方法,其它的如Bios,Memory.Network Connection等信息的查看?
只需要把查詢字改改就可以了!(可參考Platform SDK: Windows Management?
Instrumentation)?
Service Control控件介紹:?
該控件要用到一個新的查詢字"SELECT * FROM Win
?
點擊查看更多:http://wenku.it168.com/d_000687766.shtml?
轉(zhuǎn)載于:https://www.cnblogs.com/yun111/archive/2013/01/06/2847415.html
總結(jié)
以上是生活随笔為你收集整理的WMI 使用教程_.NET 入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Work Queue based mul
- 下一篇: Python2.6 Cx_Oracle