WMI 使用教程_.NET 入门教程
?WMI 使用教程_.NET 入門教程?
先介紹一下WMI 相關知識:?
什么是WMI 呢? Windows 管理規范 (Windows Management Instrumentation ),它的主要功?
能包括:訪問本地主機的一些信息和服務,可以遠程管理計算機(當然你必須擁有足夠的權限)?
也就是說可以象重起,關機,關閉進程,創建進程等等!?
有了初步了解下面我門開始一些初步的工作吧:?
在這個WMI 程序中,我將實現四個基本功能:?
1.Explorer 類似與windows 里的資源管理器?
2.SystemInfo 查看你的硬件信息和OS 信息?
3.Services 當前正在工作的信息?
4.Processes 當前執行的進程?
(這里是可以管理遠程和本地OS 的)?
好了,我們要開始實現訪問我們的OS 了,不過在這之前我們必須要引入System.Management?
這個命名空間?
下面讓我們了解一下控件的狀態事件?
我們必須保證是實時的所以必須在這里包涵UpdateStatus(string e)該事件(這是一個自定?
義的)?
這里主要是希望在點擊每個控件時刷新狀態欄,可以讓用戶知道程序在做什么!?
代碼事例:?
//控件代碼?
//狀態事件的代理?
public delegate void Status(string e);?
public event Status UpdateStatus;?
//這里更新狀態欄?
UpdateStatus("Hello world.");?
//這里是在主程序里的代碼?
//寫具體的事件代碼?
private void refreshStatusBar(string stringStatus)?
{?
//update status bar?
statusBarStatus.Text = stringStatus;?
}?
下面是具體代碼:?
Explorer Control?
這里首先介紹一下WMI的 Win32_LogicalDisk類(參考Platform SDK: Windows Management?
Instrumentation),通過它我們可以查看到本地驅動器?
的一些詳細情況,我們還需要用到System.Management中的兩個類
ManagementObjectSearcher?
和ManagementOjbectCollection它們的作用主要是ManagementObjectSearcher將查詢到了?
ManagementOjbectCollection該對象的集合中去(這里可以獲取的驅動器信息包括 驅動器
的名稱?
,類型,描述信息等)當然你也可以只查看驅動器的部分信息可以在
ManagementObjectSearcher類?
的構造函數中這樣寫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?
該控件主要用來查看本地或遠程主機的OS和硬件信息,這里需要用到另外兩個?
對象ConnectionOptions和ManagementScope,ConnectionOptions主要是設置?
WMI連接信息的,如用戶名和密碼,這里我們主要用到它的兩個屬性UserName和?
Password; ManagementScope對象表示WMI的規范,通過該規范可以訪問服務器?
和命名空間的路徑已及使用ConnectionOptions中的設置?
請看如下代碼:?
//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);?
現在我們結合剛才的知識來得到我們要的信息,但我們要得到那些我們想要信息呢??
那樣的話我們就必須要用到ObjectQuery對象,通過它我們可以得到我們想要的查詢?
信息.把ObjectQuery對象和ManagementScope對象放入ManagementObjectSearcher對象?
中這樣就可以通過我們設置好的規范和我們設置好的查詢得到我們想要的結果,當然?
還必須要掉用ManagementObjiectSearcher的Get()方法,它會返回一個ManagementObject?
對象的集合,然后可以通過結合操作來訪問到每一個我們要的信息.?
代碼如下:?
//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"]);?
}?
?
要是你只是希望查看到本地主機的信息,你就沒必要去創建 ConnectionOption,?
ManagementScope,ObjectQuery 對象,你僅僅只需要把ManagementObjectSearcher?
對象的結果在ManagementObjectCollection集合里去調用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?
轉載于:https://www.cnblogs.com/yun111/archive/2013/01/06/2847415.html
總結
以上是生活随笔為你收集整理的WMI 使用教程_.NET 入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Work Queue based mul
- 下一篇: ASP.NET WebAPI 自定义Co