西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → WMI代碼生成器WMI Code Creator中文版使用教程

WMI代碼生成器WMI Code Creator中文版使用教程

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2014/7/21 11:34:54字體大。A-A+

作者:西西點擊:167次評論:0次標(biāo)簽: WMI

ShowMiiWadsV1.4 英文綠色版
  • 類型:行業(yè)軟件大。377KB語言:英文 評分:3.3
  • 標(biāo)簽:
立即下載

WMI是一種輕松獲取系統(tǒng)信息的強(qiáng)大工具。利用它但是由于缺少WMI的介紹資料和學(xué)習(xí)資料(特別是中文的,因為國內(nèi)大部分程序員的E文水平都比較湊合,呵呵,本人也是相當(dāng)湊合),所以知道WMI的不多,能運用的就少之又少了。

WMI Code Creator是微軟提供的一個WMI代碼生成工具,這篇文章主要是介紹WMI Code Creator的用法的。首先說明這個軟件是在.net Framework 2.0下編譯的,所以在運行軟件是需要.net Framework 2.0支持。
WMI代碼生成器的界面如下:


利用WMI代碼生成器可以執(zhí)行查詢或者執(zhí)行一個方法等,還可以查看當(dāng)前或者遠(yuǎn)程電腦上的命名空間以及其下的類,并且還可以生成相關(guān)的代碼(不然就不叫WMI代碼生成器了),支持生成的代碼類型包括VBS、C#及VB.NET,默認(rèn)生成的代碼是VBS。
例如要想查詢BIOS的相關(guān)信息,可以在命名空間處選擇root\CIMV2(這個是默認(rèn)選擇),然后在全部類處選擇Win32_BIOS,這時就會列出Win32_BIOS類的所有屬性,可以選擇其中一個屬性然后點擊“查詢屬性值”,就會在下面的文本框中列出該屬性的值,如下圖所示:


從上圖中可以看出本人的本本BIOS是DELL的,在右側(cè)生成代碼處可以看到相關(guān)的VBS代碼,如果看默認(rèn)生成的VBS代碼不爽可以換成C#或者VB.NET的,具體操作就是在“編程語言”菜單處選擇,如下圖所示:


下面是選擇目標(biāo)編程語言為C#后生成的代碼,如下圖所示:


WMI代碼生成器默認(rèn)是連接到本地機(jī)器,不過也提供了連接遠(yuǎn)程主機(jī)或者主機(jī)組的功能,這個可以在目標(biāo)機(jī)器中選擇。如下圖所示。


由于本人已經(jīng)將常用操作部分漢化了(可能不是十分準(zhǔn)確),所以操作起來相對較容易上手。
說明:由于在后臺多處使用了線程池來進(jìn)行操作,所以在執(zhí)行一些耗時的操作而沒有等待完全結(jié)束退出軟件時會報異常。另外,在漢化的過程中有些不常用部分并沒有完全漢化,并且有些地方翻譯不是十分準(zhǔn)確,敬請原諒,使用本軟件時結(jié)果僅供參考。如果您的英語足夠好建議您到微軟英文官方網(wǎng)站下載英文的代碼并自行編譯(整個軟件全部包含在一個cs文件中,需要在命令行下編譯),本軟件僅僅為那些英語不十分過關(guān)的朋友提供一些小小的幫助。

WMI代碼生成器(WMI Code Creator)
3.3
類別: 編程工具    大。56KB    語言: 中文
查看詳細(xì)信息 >>

.net中的WMI編程實例:

在WMI中有一種查詢語言,類似于SQL語言,這種語言叫做WQL(WMI Query Language),實際上是標(biāo)準(zhǔn)SQL的一個子集加上了WMI的擴(kuò)展。在接下來的教程中我會給大家演示一些WQL的例子。

用js或者vbs都可以通過WMI來獲取系統(tǒng)信息。下面是一個用vbs編寫的獲取系統(tǒng)序列號的小程序,你可以把它復(fù)制到一個文本文件里,然后保存為文件為.vbs的文件,然后運行:

Set SNSet = GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")

for each SN in SNSet

 MsgBox "當(dāng)前操作系統(tǒng)的序列號是: " & SN.SerialNumber

next

這是在我的機(jī)子上運行的結(jié)果:

如果通過常規(guī)手段在.net里讓你寫這個方法不知道你需要多少行代碼?需要利用幾次搜索引擎?一會我將展示如何在.net里利用WMI獲取操作系統(tǒng)序列號。

其實在.net里是支持WMI編程的,在.net類庫里專門有一個System.Management 命名空間,MSDN介紹這個命名空間如下:
“提供對大量管理信息和管理事件集合的訪問,這些信息和事件是與根據(jù) Windows 管理規(guī)范 (WMI) 結(jié)構(gòu)對系統(tǒng)、設(shè)備和應(yīng)用程序設(shè)置檢測點有關(guān)的。應(yīng)用程序和服務(wù)可以使用從 ManagementObjectSearcher 和 ManagementQuery 派生的類,查詢感興趣的管理信息(例如在磁盤上還剩多少可用空間、當(dāng)前 CPU 利用率是多少、某一應(yīng)用程序正連接到哪一數(shù)據(jù)庫等等);或者應(yīng)用程序和服務(wù)可以使用 ManagementEventWatcher 類預(yù)訂各種管理事件。這些可訪問的數(shù)據(jù)可以來自分布式環(huán)境中托管的和非托管的組件!薄

System.Management 命名空間包含了下面一些常用類:
◆ManagementObject 或 ManagementClass:分別為單個管理對象或類。   
◆ManagementObjectSearcher:用于根據(jù)指定的查詢或枚舉檢索 ManagementObject 或 ManagementClass 對象的集合。   
◆ManagementEventWatcher:用于預(yù)訂來自 WMI 的事件通知。   
◆ManagementQuery:用作所有查詢類的基礎(chǔ)。

在實際編程中需要注意,System.Management 命名空間中的類都存在于System.Management .dll這個文件中,所以在編程的時候一定要添加對這個dll文件的引用,如下圖:


然后還需要在我們的程序開始處添加如下代碼:System.Management,這樣我們采用使用這個命名空間下的類來進(jìn)行WMI編程。

下面我將用一個方法展示我剛才提到的如何在.net里獲取操作系統(tǒng)序列號:

        /// <summary>
        /// 獲取操作系統(tǒng)序列號
        /// </summary>
        /// <returns></returns>
        public string GetSerialNumber()
        {
            string result = "";
            ManagementClass mClass = new ManagementClass("Win32_OperatingSystem");
            ManagementObjectCollection moCollection = mClass.GetInstances();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["SerialNumber"].ToString();
            }
            return result;
        }

我想這個方法夠簡單的了。

下面貼出一些常用的方法來獲取系統(tǒng)相關(guān)的信息,代碼如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace WMIDemo
{
    /// <summary>
    /// 說明:這個類很簡單,主要包含一個Main方法
    /// 作者:周公
    /// 日期:2008-1-14
    /// 首發(fā)地址:http://blog.csdn.net/zhoufoxcn
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            GetSystemInfo getInfo = new GetSystemInfo();
            Console.WriteLine("序列號="+getInfo.GetSerialNumber());
            Console.WriteLine("CPU編號=" + getInfo.GetCpuID());
            Console.WriteLine("硬盤編號=" + getInfo.GetMainHardDiskId());
            Console.WriteLine("主板編號=" + getInfo.GetMainBoardId());
            Console.WriteLine("網(wǎng)卡編號=" + getInfo.GetNetworkAdapterId());
            Console.WriteLine("用戶組=" + getInfo.GetGroupName());
            Console.WriteLine("驅(qū)動器情況=" + getInfo.GetDriverInfo());
            Console.ReadLine();
        }
    }
}

由于是一個命令行程序,所以有上面那個類,下面這個類才包含我要展示的代碼:

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;

namespace WMIDemo
{
    /// <summary>
    /// 說明:這個類主要用來展示如何利用WMI來獲取一些操作系統(tǒng)的信息
    /// 作者:周公
    /// 時間:2008-1-14
    /// 首發(fā)地址:http://blog.csdn.net/zhoufoxcn
    /// </summary>
    public class GetSystemInfo
    {
        /// <summary>
        /// 獲取操作系統(tǒng)序列號
        /// </summary>
        /// <returns></returns>
        public string GetSerialNumber()
        {
            string result = "";
            ManagementClass mClass = new ManagementClass("Win32_OperatingSystem");
            ManagementObjectCollection moCollection = mClass.GetInstances();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["SerialNumber"].ToString() + " ";
            }
            return result;
        }
        /// <summary>
        /// 查詢CPU編號
        /// </summary>
        /// <returns></returns>
        public string GetCpuID()
        {
            string result = "";
            ManagementClass mClass = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moCollection = mClass.GetInstances();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["ProcessorId"].ToString() + " ";
            }
            return result;
        }
        /// <summary>
        /// 查詢硬盤編號
        /// </summary>
        /// <returns></returns>
        public string GetMainHardDiskId()
        {
            string result = "";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
            ManagementObjectCollection moCollection = searcher.Get();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["SerialNumber"].ToString() + " ";
            }
            return result;
        }

        /// <summary>
        /// 主板編號
        /// </summary>
        /// <returns></returns>
        public string GetMainBoardId()
        {
            string result = "";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("root/CIMV2",
                    "SELECT * FROM Win32_BaseBoard");
            ManagementObjectCollection moCollection = searcher.Get();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["SerialNumber"].ToString() + " ";
            }
            return result;
        }

        /// <summary>
        /// 主板編號
        /// </summary>
        /// <returns></returns>
        public string GetNetworkAdapterId()
        {
            string result = "";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT MACAddress FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL)AND (Manufacturer <> 'Microsoft'))");
            ManagementObjectCollection moCollection = searcher.Get();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["MACAddress"].ToString() + " ";
            }
            return result;
        }

        /// <summary>
        /// 主板編號
        /// </summary>
        /// <returns></returns>
        public string GetGroupName()
        {
            string result = "";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("root/CIMV2", "SELECT * FROM Win32_Group");
            ManagementObjectCollection moCollection = searcher.Get();
            foreach (ManagementObject mObject in moCollection)
            {
                result += mObject["Name"].ToString() + " ";
            }
            return result;
        }

        /// <summary>
        /// 獲取本地驅(qū)動器信息
        /// </summary>
        /// <returns></returns>
        public string GetDriverInfo()
        {
            string result = "";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("root/CIMV2", "SELECT * FROM Win32_LogicalDisk");
            ManagementObjectCollection moCollection = searcher.Get();
            foreach (ManagementObject mObject in moCollection)
            {
                //mObject["DriveType"]共有6中可能值,分別代表如下意義:
                //1:No type   2:Floppy disk   3:Hard disk
                //4:Removable drive or network drive   5:CD-ROM   6:RAM disk
                //本處只列出固定驅(qū)動器(硬盤分區(qū))的情況
                if (mObject["DriveType"].ToString() == "3")
                {
                    result += string.Format("Name={0},FileSystem={1},Size={2},FreeSpace={3} ", mObject["Name"].ToString(),
                        mObject["FileSystem"].ToString(), mObject["Size"].ToString(), mObject["FreeSpace"].ToString());
                }
            }
            return result;
        }
    }
}

程序的運行結(jié)果如下(不同機(jī)器上的結(jié)果會不相同):

最后說明:雖然絕大部分Windows操作系統(tǒng)已經(jīng)安裝了WMI(根據(jù)微軟官方說法是自WinME以后的Windows系統(tǒng)包括WinME都安裝了),但是不能保證上面的代碼能在所有的Windows操作系統(tǒng)之上,如Win95之類,如果在不支持WMI的Windows系統(tǒng)上運行WMI,那么需要從MSDN下載WMI。

另外,運行WMI需要當(dāng)前Windows登錄用戶有一定的權(quán)限,由于本人開發(fā)時是以管理員的身份登錄并運行程序的,所以沒有權(quán)限異常提示,但是我不保證代碼在你處運行也正常,特別是在WebForm的環(huán)境下,因為asp.net程序默認(rèn)是較低的權(quán)限運行的(安全原因)。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)