筆記: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("序號更新失敗!");
}
程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。