需求:筆記本經常要在不同的地點串連網路,而各地的網路IP配置各不相同,這就導致不時的更改網卡的IP地址設定。Windows上更改IP設定很不方便,於是希望能夠開發一款能夠適用於不同網路,不同網卡的快速IP地址切換程式。
分析:關鍵在於如何?對網路介面卡的配置。其實,MS為我們提供了System.Management 命名空間下的ManagementClass類,通過它我們可以擷取和設定電腦上所有適配器的資訊。其次,就是要實現對配置資訊的儲存,這個就簡單了,可以通過將網卡資訊序列化後儲存到檔案中,然後經還原序列化取出。
實現:解決了上面兩個問題,一切就簡單了。那就讓我們開始吧,最終效果()
這裡我們著重瞭解一下ManagementClass類吧:它表示公用資訊模型 (CIM) 管理類。管理類是一個 WMI 類別,如 Win32_LogicalDisk 和 Win32_Process,前者表示磁碟機,後者表示進程(如 Notepad.exe),那麼網路介面卡就是 Win32_NetworkAdapterConfiguration 。關於Win32_NetworkAdapterConfiguration類的更多資訊(如它具有的屬性和方法),可以參考MSDN上的相關說明。
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
這樣就輕鬆獲得了電腦上所有網卡的執行個體了。一個WMI的執行個體我們可以用ManagementObject來表示。我們通過調用執行個體的InvokeMethod方法,來對相應的網卡IP進行配置。如:
networkAdapter.InvokeMethod("EnableDHCP", null, null);//通過調用Win32_NetworkAdapterConfiguration類的EnableDHCP方法,設定網卡執行個體networkAdapter為自動獲得IP地址(即開啟DHCP功能)
ManagementBaseObject parIPSetting = networkAdapter.GetMethodParameters("EnableStatic");//對於有參數的Win32_NetworkAdapterConfiguration類的方法,得先用GetMethodParameters方法來獲得參數對象,然後再給參數賦值。
parIPSetting["IPAddress"] = new string[] {ipAddress};
parIPSetting["SubnetMask"] = new string[] {subnetMask};
networkAdapter.InvokeMethod("EnableStatic", parIPSetting, null);//這是一個設定IP地址及子網路遮罩的例子
有了上面的介紹類似的,我相信,只要是用心的人就可以通過MSDN上對Win32_NetworkAdapterConfiguration類欄位與方法的說明,就可以很快完成其餘的相關網卡的預設閘道及DNS伺服器等項目的配置了。
《完》