筆記:WMI 操作

筆記:WMI 操作

 

定義 WMI 的範圍路徑

ManagementScope Scope = new ManagementScope(\\.\ROOT\cimv2);

 

連線到WMI命名空間

Scope.Connect();

 

定義查詢物件

ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_WindowsProductActivation");

 

查詢 WMI 資料

ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);

 

透過 foreach 將各項物件取出

foreach (ManagementObject ClassInstance in Searcher.Get()) { . . . }

 

使用其中的方法

定義該方法所要傳入的參數物件

ManagementBaseObject inParams = ClassInstance.GetMethodParameters("指定的方法名稱");

設定參數資料

inParams["參數名稱"] = "參數資料";

執行方法(方法名稱,傳入參數,執行選項)

ClassInstance.InvokeMethod("方法名稱", inParams, null);

 

 

範例:變更 WinXP 的產品序號


ManagementScope WMIScope = new ManagementScope("\\\\.\\ROOT\\cimv2");
WMIScope.Connect();

ObjectQuery WMIQuery = new ObjectQuery("SELECT * FROM Win32_WindowsProductActivation");
ManagementObjectSearcher WMISearcher = new ManagementObjectSearcher(WMIScope, WMIQuery);

try
{
    foreach (ManagementObject SubInstance in WMISearcher.Get())
    {
        ManagementBaseObject MethodParameters = SubInstance.GetMethodParameters("SetProductKey");
        MethodParameters["ProductKey"] = "12345-ABCDE-ZZZZZ-EDCBA-54321";
        SubInstance.InvokeMethod("SetProductKey", MethodParameters, null);
    }

    MessageBox.Show("序號已更新\!");
}
catch
{
    MessageBox.Show("序號更新失敗!");
}

程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。