国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 編程設計 > 正文

WMI代碼生成器怎么使用 WMI Code Creator使用詳細圖文教程

2020-06-27 13:56:54
字體:
來源:轉載
供稿:網友

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

 

軟件名稱:
WMI代碼生成器(WMI Code Creator) 1.0 漢化綠色免費版
軟件大小:
52KB
更新時間:
2018-04-24

 

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

WMI代碼生成器的界面如下:

WMI,代碼生成器,WMICodeCreator

利用WMI代碼生成器可以執行查詢或者執行一個方法等,還可以查看當前或者遠程電腦上的命名空間以及其下的類,并且還可以生成相關的代碼(不然就不叫WMI代碼生成器了),支持生成的代碼類型包括VBS、C#及VB.NET,默認生成的代碼是VBS。

例如要想查詢BIOS的相關信息,可以在命名空間處選擇root/CIMV2(這個是默認選擇),然后在全部類處選擇Win32_BIOS,這時就會列出Win32_BIOS類的所有屬性,可以選擇其中一個屬性然后點擊“查詢屬性值”,就會在下面的文本框中列出該屬性的值,如下圖所示:

WMI,代碼生成器,WMICodeCreator

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

WMI,代碼生成器,WMICodeCreator

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

WMI,代碼生成器,WMICodeCreator

WMI代碼生成器默認是連接到本地機器,不過也提供了連接遠程主機或者主機組的功能,這個可以在目標機器中選擇。如下圖所示。

WMI,代碼生成器,WMICodeCreator

由于本人已經將常用操作部分漢化了(可能不是十分準確),所以操作起來相對較容易上手。

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

.net中的WMI編程實例:

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

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

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

for each SN in SNSet

 MsgBox "當前操作系統的序列號是: " & SN.SerialNumber

這是在我的機子上運行的結果:

WMI,代碼生成器,WMICodeCreator

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

其實在.net里是支持WMI編程的,在.net類庫里專門有一個System.Management 命名空間,MSDN介紹這個命名空間如下:

“提供對大量管理信息和管理事件集合的訪問,這些信息和事件是與根據 Windows 管理規范 (WMI) 結構對系統、設備和應用程序設置檢測點有關的。應用程序和服務可以使用從 ManagementObjectSearcher 和 ManagementQuery 派生的類,查詢感興趣的管理信息(例如在磁盤上還剩多少可用空間、當前 CPU 利用率是多少、某一應用程序正連接到哪一數據庫等等);或者應用程序和服務可以使用 ManagementEventWatcher 類預訂各種管理事件。這些可訪問的數據可以來自分布式環境中托管的和非托管的組件。”。

System.Management 命名空間包含了下面一些常用類:

◆ManagementObject 或 ManagementClass:分別為單個管理對象或類。   

◆ManagementObjectSearcher:用于根據指定的查詢或枚舉檢索 ManagementObject 或 ManagementClass 對象的集合。   

◆ManagementEventWatcher:用于預訂來自 WMI 的事件通知。   

◆ManagementQuery:用作所有查詢類的基礎。

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

WMI,代碼生成器,WMICodeCreator

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

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

        /// <summary>

        /// 獲取操作系統序列號

        /// </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;

        }

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

下面貼出一些常用的方法來獲取系統相關的信息,代碼如下:

using System;

using System.Collections.Generic;

using System.Text;

namespace WMIDemo

{

    /// <summary>

    /// 說明:這個類很簡單,主要包含一個Main方法

    /// 作者:周公

    /// 日期:2008-1-14

    /// 首發地址: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("網卡編號=" + getInfo.GetNetworkAdapterId());

            Console.WriteLine("用戶組=" + getInfo.GetGroupName());

            Console.WriteLine("驅動器情況=" + getInfo.GetDriverInfo());

            Console.ReadLine();

        }

    }

}

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

using System;

using System.Collections.Generic;

using System.Text;

using System.Management;

namespace WMIDemo

{

    /// <summary>

    /// 說明:這個類主要用來展示如何利用WMI來獲取一些操作系統的信息

    /// 作者:周公

    /// 時間:2008-1-14

    /// 首發地址:http://blog.csdn.net/zhoufoxcn

    /// </summary>

    public class GetSystemInfo

    {

        /// <summary>

        /// 獲取操作系統序列號

        /// </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>

        /// 獲取本地驅動器信息

        /// </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

                //本處只列出固定驅動器(硬盤分區)的情況

                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;

        }

    }

}

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

WMI,代碼生成器,WMICodeCreator

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青神县| 固阳县| 锡林郭勒盟| 南宁市| 赤水市| 泰来县| 济阳县| 莱芜市| 闵行区| 卢氏县| 同心县| 桦甸市| 吉林省| 雷山县| 蚌埠市| 利津县| 福海县| 鄯善县| 梁山县| 洛浦县| 台中市| 固原市| 天台县| 余庆县| 八宿县| 社会| 宝鸡市| 隆德县| 当雄县| 瑞丽市| 米脂县| 盖州市| 郑州市| 乌鲁木齐县| 南宁市| 公安县| 龙里县| 瑞丽市| 汽车| 启东市| 鹿邑县|