天天看點

C#下通過wbemtest和WMI Code Cretor更加高效的通路WMI

能找到這篇部落格的,相信都是有操作WMI需求的了。但是不知道如何快速驗證、并內建到C#來操作WMI。我們分為3步:

##第一步:官網(或跟硬體開發WMI的人溝通你需要的接口和參數定義,如果是和硬體開發的人協定WMI接口,直接看第二步)查找你需要的WMI資訊;

舉例我需要擷取顯示器資訊

我先biying搜尋需要哪個WMI,再microsoft的docs下找到對應的WMI Requirements詳細資訊。

比如我知道了我需要WmiMonitorConnectionParams 來擷取顯示器資訊。那麼我去docs文檔中搜尋WmiMonitorConnectionParams ,位址如下:

WmiMonitorConnectionParams class - Win32 apps | Microsoft Docs

我們看下圖的Namespace的Value是Root\wmi

C#下通過wbemtest和WMI Code Cretor更加高效的通路WMI

我們就知道了,他書屬于namespace命名空間的同時我們再網站的上面找到Properties,看到有一個一個InstanceName和一個VideoOutputTechnology,分别是string類型和uint32類型。

我們目前需要的資訊就這麼多,然後我們開始快速的再需要驗證的機器上來驗證接口傳回資訊,如果有問題。

##第二步:不需要寫代碼,快速驗證接口是否可用。

(避免有因為個人代碼導緻的其他問題,占用大量溝時間,這種軟硬體結合的溝通調試成本較高)

使用Win+R鍵打開允許輸入wbemtest.exe按下回車,這是系統自帶的WMI工具。

C#下通過wbemtest和WMI Code Cretor更加高效的通路WMI

這個就是我們快速驗證WMI的工具。

(1)點選連接配接。

(2)再彈出框的命名空間理輸入我們剛才再網上查到的命名空間:Root\wmi。因為我們不是遠端連接配接到其他電腦,是以連接配接保持預設。點選右上角連接配接。

(3)不一樣的WMI消息查詢方式是不一樣的,比如有的是主動查詢、有的是被動接受。主要差别是再選擇查詢和通知查詢上。更為複雜的操作我們這裡目前用不上,因為我們主要是為了驗證WMI。

本次我們點選查詢,因為是我們主動查詢顯示器資訊,這不是一個事件,在彈出的查詢對話框中輸入:

SELECT InstanceName, VideoOutputTechnology FROM WmiMonitorConnectionParams      

點選應用,出現下圖就代表該接口能正常通路,如果提示錯誤,就代表輸入有問題。或輸入的WMI有問題,需要調試或跟對應的人員溝通,如果是硬體給你發送的WMI,要确認這台機器上硬體以調試好,能正常發送WMI消息。

C#下通過wbemtest和WMI Code Cretor更加高效的通路WMI

達到這樣的效果,WMI就相當于測試通拉,是不是快速驗證WMI特别友善和快捷?能大量提高溝通效率。 接下來就是代碼環節了。

##第三步:使用WMI工具生成代碼:

WMI Code Creator是微軟提供的一個WMI代碼生成工具,用于生成對應的WMI通路代碼。可以選擇

從這個網站下載下傳軟體:

Download WMI Code Creator v1.0 from Official Microsoft Download Center

我們點選Code Language 切換到C# 。

(1)Namespace:選擇root\WMI (-------注意大小寫!!!-------)

(2)再Classes選擇或輸入我們查到的WmiMonitorConnectionParams 。

(3)再result下勾選我們要查詢的内容,3個我們都要查。

(4)代碼就會再右側出現了。這樣的話。就能正常的移植代碼到我們的項目中拉。

(5)這個通路WMI的功能微軟主要封裝在System.Management的命名空間下。剩下的就可以自己擴充拉。有自己去通路得到值得WMI。還有接受事件得WMI。主要思路就是先查或定義自己要用得WMI接口然後查詢或者協商定義參數。然後再這裡封裝代碼就可以拉。

C#下通過wbemtest和WMI Code Cretor更加高效的通路WMI