天天看點

C#取硬碟、CPU、主機闆、網卡的序号 ManagementObjectSearcher

在很多情況下,你可能都需要得到微機的硬體資訊。比如:你想給你的軟體加鎖,不讓别人随便通路。

最有效的辦法是擷取CPU的序列号,然後讓你的軟體隻能運作在有這樣的CPU序列号的機器上。衆所周知,CPU序列号是唯一的!是以,這樣就可以為你的軟體加鎖了。powered by 25175.net

另外一個需要硬碟資訊的例子是:硬碟有幾個分區,每個分區各有多少剩餘空間。當你正在做一個多媒體應用程式的時候,你可能也需要獲得有關聲霸卡、顯示卡的硬體資訊。

本應用程式另一個精彩的應用是:擷取有關系統記憶體的資訊,如記憶體位址,記憶體裝置等等。

首先,你必須知道這個應用程式的功能是使用System.Management這個類得到的。是以,你需要加上下面的這句話:

using System.Management;

為了擷取硬體資訊,你還需要建立一個ManagementObjectSearcher 對象。

ManagementObjectSearcher searcher = new ManagementObjectSearcher(“select * from ” + Key);

// 硬體

Win32_Processor, // CPU 處理器

Win32_PhysicalMemory, // 實體記憶體條

Win32_Keyboard, // 鍵盤

Win32_PointingDevice, // 點輸入裝置,包括滑鼠。

Win32_FloppyDrive, // 軟碟驅動器

Win32_DiskDrive, // 硬碟驅動器

Win32_CDROMDrive, // CD光牒驅動器

Win32_BaseBoard, // 主機闆

Win32_BIOS, // BIOS 晶片

Win32_ParallelPort, // 并口

Win32_SerialPort, // 序列槽

Win32_SerialPortConfiguration, // 序列槽配置

Win32_SoundDevice, // 多媒體設定,一般指聲霸卡。

Win32_SystemSlot, // 主機闆插槽 (ISA & PCI & AGP)

Win32_USBController, // USB 控制器

Win32_NetworkAdapter, // 網絡擴充卡

Win32_NetworkAdapterConfiguration, // 網絡擴充卡設定

Win32_Printer, // 列印機

Win32_PrinterConfiguration, // 列印機設定

Win32_PrintJob, // 列印機任務

Win32_TCPIPPrinterPort, // 列印機端口

Win32_POTSModem, // MODEM

Win32_POTSModemToSerialPort, // MODEM 端口

Win32_DesktopMonitor, // 顯示器

Win32_DisplayConfiguration, // 顯示卡

Win32_DisplayControllerConfiguration, // 顯示卡設定

Win32_VideoController, // 顯示卡細節。

Win32_VideoSettings, // 顯示卡支援的顯示模式。

// 作業系統

Win32_TimeZone, // 時區

Win32_SystemDriver, // 驅動程式

Win32_DiskPartition, // 磁盤分區

Win32_LogicalDisk, // 邏輯磁盤

Win32_LogicalDiskToPartition, // 邏輯磁盤所在分區及始末位置。

Win32_LogicalMemoryConfiguration, // 邏輯記憶體配置

Win32_PageFile, // 系統頁檔案資訊

Win32_PageFileSetting, // 頁檔案設定

Win32_BootConfiguration, // 系統啟動配置

Win32_ComputerSystem, // 計算機資訊簡要

Win32_OperatingSystem, // 作業系統資訊

Win32_StartupCommand, // 系統自動啟動程式

Win32_Service, // 系統安裝的服務

Win32_Group, // 系統管理組

Win32_GroupUser, // 系統組帳号

Win32_UserAccount, // 使用者帳号

Win32_Process, // 系統程序

Win32_Thread, // 系統線程

Win32_Share, // 共享

Win32_NetworkClient, // 已安裝的網絡用戶端

Win32_NetworkProtocol, // 已安裝的網絡協定

上面代碼的Key是一個将被對應正确的資料填入的值。例如,擷取CPU的資訊,就需要把Key值設成Win32_Processor。所有Key可能的值,列舉如下:

Win32_1394Controller

Win32_1394ControllerDevice

Win32_Account

Win32_AccountSID

Win32_ACE

Win32_ActionCheck

Win32_AllocatedResource

Win32_ApplicationCommandLine

Win32_ApplicationService

Win32_AssociatedBattery

Win32_AssociatedProcessorMemory

Win32_BaseBoard

Win32_BaseService

Win32_Battery

Win32_Binary

Win32_BindImageAction

Win32_BIOS

Win32_BootConfiguration

Win32_Bus

Win32_CacheMemory

Win32_CDROMDrive

Win32_CheckCheck

Win32_CIMLogicalDeviceCIMDataFile

Win32_ClassicCOMApplicationClasses

Win32_ClassicCOMClass

Win32_ClassicCOMClassSetting

Win32_ClassicCOMClassSettings

Win32_ClassInfoAction

Win32_ClientApplicationSetting

Win32_CodecFile

Win32_COMApplication

Win32_COMApplicationClasses

Win32_COMApplicationSettings

Win32_COMClass

Win32_ComClassAutoEmulator

Win32_ComClassEmulator

Win32_CommandLineAccess

Win32_ComponentCategory

Win32_ComputerSystem

Win32_ComputerSystemProcessor

Win32_ComputerSystemProduct

Win32_COMSetting

Win32_Condition

Win32_CreateFolderAction

Win32_CurrentProbe

Win32_DCOMApplication

Win32_DCOMApplicationAccessAllowedSetting

Win32_DCOMApplicationLaunchAllowedSetting

Win32_DCOMApplicationSetting

Win32_DependentService

Win32_Desktop

Win32_DesktopMonitor

Win32_DeviceBus

Win32_DeviceMemoryAddress

Win32_DeviceSettings

Win32_Directory

Win32_DirectorySpecification

Win32_DiskDrive

Win32_DiskDriveToDiskPartition

Win32_DiskPartition

Win32_DisplayConfiguration

Win32_DisplayControllerConfiguration

Win32_DMAChannel

Win32_DriverVXD

Win32_DuplicateFileAction

Win32_Environment

Win32_EnvironmentSpecification

Win32_ExtensionInfoAction

Win32_Fan

Win32_FileSpecification

Win32_FloppyController

Win32_FloppyDrive

Win32_FontInfoAction

Win32_Group

Win32_GroupUser

Win32_HeatPipe

Win32_IDEController

Win32_IDEControllerDevice

Win32_ImplementedCategory

Win32_InfraredDevice

Win32_IniFileSpecification

Win32_InstalledSoftwareElement

Win32_IRQResource

Win32_Keyboard

Win32_LaunchCondition

Win32_LoadOrderGroup

Win32_LoadOrderGroupServiceDependencies

Win32_LoadOrderGroupServiceMembers

Win32_LogicalDisk

Win32_LogicalDiskRootDirectory

Win32_LogicalDiskToPartition

Win32_LogicalFileAccess

Win32_LogicalFileAuditing

Win32_LogicalFileGroup

Win32_LogicalFileOwner

Win32_LogicalFileSecuritySetting

Win32_LogicalMemoryConfiguration

Win32_LogicalProgramGroup

Win32_LogicalProgramGroupDirectory

Win32_LogicalProgramGroupItem

Win32_LogicalProgramGroupItemDataFile

Win32_LogicalShareAccess

Win32_LogicalShareAuditing

Win32_LogicalShareSecuritySetting

Win32_ManagedSystemElementResource

Win32_MemoryArray

Win32_MemoryArrayLocation

Win32_MemoryDevice

Win32_MemoryDeviceArray

Win32_MemoryDeviceLocation

Win32_MethodParameterClass

Win32_MIMEInfoAction

Win32_MotherboardDevice

Win32_MoveFileAction

Win32_MSIResource

Win32_networkAdapter

Win32_networkAdapterConfiguration

Win32_networkAdapterSetting

Win32_networkClient

Win32_networkConnection

Win32_networkLoginProfile

Win32_networkProtocol

Win32_NTEventlogFile

Win32_NTLogEvent

Win32_NTLogEventComputer

Win32_NTLogEventLog

Win32_NTLogEventUser

Win32_ODBCAttribute

Win32_ODBCDataSourceAttribute

Win32_ODBCDataSourceSpecification

Win32_ODBCDriverAttribute

Win32_ODBCDriverSoftwareElement

Win32_ODBCDriverSpecification

Win32_ODBCSourceAttribute

Win32_ODBCTranslatorSpecification

Win32_OnBoardDevice

Win32_OperatingSystem

Win32_OperatingSystemQFE

Win32_OSRecoveryConfiguration

Win32_PageFile

Win32_PageFileElementSetting

Win32_PageFileSetting

Win32_PageFileUsage

Win32_ParallelPort

Win32_Patch

Win32_PatchFile

Win32_PatchPackage

Win32_PCMCIAController

Win32_Perf

Win32_PerfRawData

Win32_PerfRawData_ASP_ActiveServerPages

Win32_PerfRawData_ASPnet_114322_ASPnetAppsv114322

Win32_PerfRawData_ASPnet_114322_ASPnetv114322

Win32_PerfRawData_ASPnet_ASPnet

Win32_PerfRawData_ASPnet_ASPnetApplications

Win32_PerfRawData_IAS_IASAccountingClients

Win32_PerfRawData_IAS_IASAccountingServer

Win32_PerfRawData_IAS_IASAuthenticationClients

Win32_PerfRawData_IAS_IASAuthenticationServer

Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal

Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator

Win32_PerfRawData_MSFTPSVC_FTPService

Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods

Win32_PerfRawData_MSSQLSERVER_SQLServerBackupDevice

Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager

Win32_PerfRawData_MSSQLSERVER_SQLServerBufferPartition

Win32_PerfRawData_MSSQLSERVER_SQLServerCacheManager

Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases

Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics

Win32_PerfRawData_MSSQLSERVER_SQLServerLatches

Win32_PerfRawData_MSSQLSERVER_SQLServerLocks

Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager

Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationAgents

Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationDist

Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationLogreader

Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationMerge

Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationSnapshot

Win32_PerfRawData_MSSQLSERVER_SQLServerSQLStatistics

Win32_PerfRawData_MSSQLSERVER_SQLServerUserSettable

Win32_PerfRawData_netFramework_netCLRExceptions

Win32_PerfRawData_netFramework_netCLRInterop

Win32_PerfRawData_netFramework_netCLRJit

Win32_PerfRawData_netFramework_netCLRLoading

Win32_PerfRawData_netFramework_netCLRLocksAndThreads

Win32_PerfRawData_netFramework_netCLRMemory

Win32_PerfRawData_netFramework_netCLRRemoting

Win32_PerfRawData_netFramework_netCLRSecurity

Win32_PerfRawData_Outlook_Outlook

Win32_PerfRawData_PerfDisk_PhysicalDisk

Win32_PerfRawData_Perfnet_Browser

Win32_PerfRawData_Perfnet_Redirector

Win32_PerfRawData_Perfnet_Server

Win32_PerfRawData_Perfnet_ServerWorkQueues

Win32_PerfRawData_PerfOS_Cache

Win32_PerfRawData_PerfOS_Memory

Win32_PerfRawData_PerfOS_Objects

Win32_PerfRawData_PerfOS_PagingFile

Win32_PerfRawData_PerfOS_Processor

Win32_PerfRawData_PerfOS_System

Win32_PerfRawData_PerfProc_FullImage_Costly

Win32_PerfRawData_PerfProc_Image_Costly

Win32_PerfRawData_PerfProc_JobObject

Win32_PerfRawData_PerfProc_JobObjectDetails

Win32_PerfRawData_PerfProc_Process

Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly

Win32_PerfRawData_PerfProc_Thread

Win32_PerfRawData_PerfProc_ThreadDetails_Costly

Win32_PerfRawData_RemoteAccess_RASPort

Win32_PerfRawData_RemoteAccess_RASTotal

Win32_PerfRawData_RSVP_ACSPerRSVPService

Win32_PerfRawData_Spooler_PrintQueue

Win32_PerfRawData_TapiSrv_Telephony

Win32_PerfRawData_Tcpip_ICMP

Win32_PerfRawData_Tcpip_IP

Win32_PerfRawData_Tcpip_NBTConnection

Win32_PerfRawData_Tcpip_networkInterface

Win32_PerfRawData_Tcpip_TCP

Win32_PerfRawData_Tcpip_UDP

Win32_PerfRawData_W3SVC_WebService

Win32_PhysicalMedia

Win32_PhysicalMemory

Win32_PhysicalMemoryArray

Win32_PhysicalMemoryLocation

Win32_PNPAllocatedResource

Win32_PnPDevice

Win32_PnPEntity

Win32_PointingDevice

Win32_PortableBattery

Win32_PortConnector

Win32_PortResource

Win32_POTSModem

Win32_POTSModemToSerialPort

Win32_PowerManagementEvent

Win32_Printer

Win32_PrinterConfiguration

Win32_PrinterController

Win32_PrinterDriverDll

Win32_PrinterSetting

Win32_PrinterShare

Win32_PrintJob

Win32_PrivilegesStatus

Win32_Process

Win32_Processor

Win32_ProcessStartup

Win32_Product

Win32_ProductCheck

Win32_ProductResource

Win32_ProductSoftwareFeatures

Win32_ProgIDSpecification

Win32_ProgramGroup

Win32_ProgramGroupContents

Win32_ProgramGroupOrItem

Win32_Property

Win32_ProtocolBinding

Win32_PublishComponentAction

Win32_QuickFixEngineering

Win32_Refrigeration

Win32_Registry

Win32_RegistryAction

Win32_RemoveFileAction

Win32_RemoveIniAction

Win32_ReserveCost

Win32_ScheduledJob

Win32_SCSIController

Win32_SCSIControllerDevice

Win32_SecurityDescriptor

Win32_SecuritySetting

Win32_SecuritySettingAccess

Win32_SecuritySettingAuditing

Win32_SecuritySettingGroup

Win32_SecuritySettingOfLogicalFile

Win32_SecuritySettingOfLogicalShare

Win32_SecuritySettingOfObject

Win32_SecuritySettingOwner

Win32_SelfRegModuleAction

Win32_SerialPort

Win32_SerialPortConfiguration

Win32_SerialPortSetting

Win32_Service

Win32_ServiceControl

Win32_ServiceSpecification

Win32_ServiceSpecificationService

Win32_SettingCheck

Win32_Share

Win32_ShareToDirectory

Win32_ShortcutAction

Win32_ShortcutFile

Win32_ShortcutSAP

Win32_SID

Win32_SMBIOSMemory

Win32_SoftwareElement

Win32_SoftwareElementAction

Win32_SoftwareElementCheck

Win32_SoftwareElementCondition

Win32_SoftwareElementResource

Win32_SoftwareFeature

Win32_SoftwareFeatureAction

Win32_SoftwareFeatureCheck

Win32_SoftwareFeatureParent

Win32_SoftwareFeatureSoftwareElements

Win32_SoundDevice

Win32_StartupCommand

Win32_SubDirectory

Win32_SystemAccount

Win32_SystemBIOS

Win32_SystemBootConfiguration

Win32_SystemDesktop

Win32_SystemDevices

Win32_SystemDriver

Win32_SystemDriverPNPEntity

Win32_SystemEnclosure

Win32_SystemLoadOrderGroups

Win32_SystemLogicalMemoryConfiguration

Win32_SystemMemoryResource

Win32_SystemnetworkConnections

Win32_SystemOperatingSystem

Win32_SystemPartitions

Win32_SystemProcesses

Win32_SystemProgramGroups

Win32_SystemResources

Win32_SystemServices

Win32_SystemSetting

Win32_SystemSlot

Win32_SystemSystemDriver

Win32_SystemTimeZone

Win32_SystemUsers

Win32_TapeDrive

Win32_TemperatureProbe

Win32_Thread

Win32_TimeZone

Win32_Trustee

Win32_TypeLibraryAction

Win32_UninterruptiblePowerSupply

Win32_USBController

Win32_USBControllerDevice

Win32_UserAccount

Win32_UserDesktop

Win32_VideoConfiguration

Win32_VideoController

Win32_VideoSettings

Win32_VoltageProbe

Win32_WMIElementSetting

Win32_WMISetting

首先,調用ManagementObjectSearcher執行個體(在本文中的例子裡為searcher )中的Get()方法,該方法将會把傳回資訊填在這個執行個體中。然後,你所要做的就是處理這個執行個體searcher中的資料。

foreach (ManagementObject share in searcher.Get()){// Some Codes ...}
           

每個ManagementObject的對象中都有一些,我們所需要的資料,當然我們可以接着這麼處理這些資料:

foreach (PropertyData PC in share.Properties){//some codes ...}
           

本文中代碼的其它部分隻是對于ListView控件的一些操作,很簡單,就不再詳述了!

/// <summary>
        /// 獲得CPU編号
        /// </summary>
        /// <returns></returns>
        public string GetCPUID()
        {
            string cpuid = "";
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                cpuid = mo.Properties["ProcessorId"].Value.ToString();
            }
            return cpuid;
        }

        /// <summary>
        /// 擷取硬碟序列号
        /// </summary>
        /// <returns></returns>
        public string GetDiskSerialNumber()
        {
            //這種模式在插入一個U盤後可能會有不同的結果,如插入我的手機時
            String HDid = "";
            ManagementClass mc = new ManagementClass("Win32_DiskDrive");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                HDid = (string)mo.Properties["Model"].Value;//SerialNumber
                break;//這名話解決有多個實體盤時産生的問題,隻取第一個實體硬碟
            }
            return HDid;

            /*ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
            ManagementObjectCollection moc = mc.GetInstances();
            string str = "";
            foreach (ManagementObject mo in moc)
            {
                str = mo.Properties["SerialNumber"].Value.ToString();
                break;
            }
            return str;*/
        }

        /// <summary>
        /// 擷取網卡硬體位址
        /// </summary>
        /// <returns></returns> 
        public string GetMacAddress()
        {
            string mac = "";
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                {
                    mac = mo["MacAddress"].ToString();
                    break;
                }
            }
            return mac;
        }

        /// <summary>
        /// 擷取IP位址
        /// </summary>
        /// <returns></returns>
        public string GetIPAddress()
        {
            string st = "";
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                {
                    //st=mo["IpAddress"].ToString(); 
                    System.Array ar;
                    ar = (System.Array)(mo.Properties["IpAddress"].Value);
                    st = ar.GetValue().ToString();
                    break;
                }
            }
            return st;
        }

        /// <summary>
        /// 作業系統的登入使用者名
        /// </summary>
        /// <returns></returns> 
        public string GetUserName()
        {
            return Environment.UserName;
        }


        /// <summary>
        /// 擷取計算機名
        /// </summary>
        /// <returns></returns>
        public string GetComputerName()
        {
            return Environment.MachineName;
        }

        /// <summary>
        /// 作業系統類型
        /// </summary>
        /// <returns></returns> 
        public string GetSystemType()
        {
            string st = "";
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                st = mo["SystemType"].ToString();
            }
            return st;
        }

        /// <summary>
        /// 實體記憶體
        /// </summary>
        /// <returns></returns>
        public string GetPhysicalMemory()
        {
            string st = "";
            ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                st = mo["TotalPhysicalMemory"].ToString();
            }
            return st;
        }

        /// <summary>
        /// 顯示卡PNPDeviceID
        /// </summary>
        /// <returns></returns>
        public string GetVideoPNPID()
        {
            string st = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_VideoController");
            foreach (ManagementObject mo in mos.Get())
            {
                st = mo["PNPDeviceID"].ToString();
            }
            return st;
        }

        /// <summary>
        /// 聲霸卡PNPDeviceID
        /// </summary>
        /// <returns></returns>
        public string GetSoundPNPID()
        {
            string st = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_SoundDevice");
            foreach (ManagementObject mo in mos.Get())
            {
                st = mo["PNPDeviceID"].ToString();
            }
            return st;
        }

        /// <summary>
        /// CPU版本資訊
        /// </summary>
        /// <returns></returns>
        public string GetCPUVersion()
        {
            string st = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (ManagementObject mo in mos.Get())
            {
                st = mo["Version"].ToString();
            }
            return st;
        }

        /// <summary>
        /// CPU名稱資訊
        /// </summary>
        /// <returns></returns>
        public string GetCPUName()
        {
            string st = "";
            ManagementObjectSearcher driveID = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (ManagementObject mo in driveID.Get())
            {
                st = mo["Name"].ToString();
            }
            return st;
        }

        /// <summary>
        /// CPU制造廠商
        /// </summary>
        /// <returns></returns>
        public string GetCPUManufacturer()
        {
            string st = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (ManagementObject mo in mos.Get())
            {
                st = mo["Manufacturer"].ToString();
            }
            return st;
        }

        /// <summary>
        /// 主機闆制造廠商
        /// </summary>
        /// <returns></returns>
        public string GetBoardManufacturer()
        {
            SelectQuery query = new SelectQuery("Select * from Win32_BaseBoard");
            ManagementObjectSearcher mos = new ManagementObjectSearcher(query);
            ManagementObjectCollection.ManagementObjectEnumerator data = mos.Get().GetEnumerator();
            data.MoveNext();
            ManagementBaseObject board = data.Current;
            return board.GetPropertyValue("Manufacturer").ToString();
        }

        /// <summary>
        /// 主機闆編号
        /// </summary>
        /// <returns></returns>
        public string GetBoardID()
        {
            string st = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
            foreach (ManagementObject mo in mos.Get())
            {
                st = mo["SerialNumber"].ToString();
            }
            return st;
        }

        /// <summary>
        /// 主機闆型号
        /// </summary>
        /// <returns></returns>
        public string GetBoardType()
        {
            string st = "";
            ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
            foreach (ManagementObject mo in mos.Get())
            {
                st = mo["Product"].ToString();
            }
            return st;
        }
           

網絡設定類,設定網絡的各種參數(DNS、網關、子網路遮罩、IP)具體實作方法

using System;  
using System.Collections.Generic;  
using System.Text;  
using System;  
using System.Collections;  
using System.Text;  
using System.Management;  
using System.Text.RegularExpressions;  



namespace Demo  
{  
    /// <summary>  
    /// 網絡設定類,設定網絡的各種參數(DNS、網關、子網路遮罩、IP)  
    /// </summary>  
    public class NetworkSetting  
    {  
        public NetworkSetting()  
        {  
            // 構造函數邏輯              
        }  

        /// <summary>  
        /// 設定DNS  
        /// </summary>  
        /// <param name="dns"></param>  
        public static void SetDNS(string[] dns)  
        {  
            SetIPAddress(null, null, null, dns);  
        }  
        /// <summary>  
        /// 設定網關  
        /// </summary>  
        /// <param name="getway"></param>  
        public static void SetGetWay(string getway)  
        {  
            SetIPAddress(null, null, new string[] { getway }, null);  
        }  
        /// <summary>  
        /// 設定網關  
        /// </summary>  
        /// <param name="getway"></param>  
        public static void SetGetWay(string[] getway)  
        {  
            SetIPAddress(null, null, getway, null);  
        }  
        /// <summary>  
        /// 設定IP位址和掩碼  
        /// </summary>  
        /// <param name="ip"></param>  
        /// <param name="submask"></param>  
        public static void SetIPAddress(string ip, string submask)  
        {  
            SetIPAddress(new string[] { ip }, new string[] { submask }, null, null);  
        }  
        /// <summary>  
        /// 設定IP位址,掩碼和網關  
        /// </summary>  
        /// <param name="ip"></param>  
        /// <param name="submask"></param>  
        /// <param name="getway"></param>  
        public static void SetIPAddress(string ip, string submask, string getway)  
        {  
            SetIPAddress(new string[] { ip }, new string[] { submask }, new string[] { getway }, null);  
        }  
        /// <summary>  
        /// 設定IP位址,掩碼,網關和DNS  
        /// </summary>  
        /// <param name="ip"></param>  
        /// <param name="submask"></param>  
        /// <param name="getway"></param>  
        /// <param name="dns"></param>  
        public static void SetIPAddress(string[] ip, string[] submask, string[] getway, string[] dns)  
        {  
            ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");  
            ManagementObjectCollection moc = wmi.GetInstances();  
            ManagementBaseObject inPar = null;  
            ManagementBaseObject outPar = null;  
            foreach (ManagementObject mo in moc)  
            {  
                //如果沒有啟用IP設定的網絡裝置則跳過  
                if (!(bool) mo["IPEnabled"])  
                    continue;                  

                //設定IP位址和掩碼  
                if (ip != null && submask != null)  
                {  
                    inPar = mo.GetMethodParameters("EnableStatic");  
                    inPar["IPAddress"] = ip;  
                    inPar["SubnetMask"] = submask;  
                    outPar = mo.InvokeMethod("EnableStatic", inPar, null);  
                }                  

                //設定網關位址  
                if (getway != null)  
                {  
                    inPar = mo.GetMethodParameters("SetGateways");  
                    inPar["DefaultIPGateway"] = getway;  
                    outPar = mo.InvokeMethod("SetGateways", inPar, null);  
                }                  

                //設定DNS位址  
                if (dns != null)  
                {  
                    inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");  
                    inPar["DNSServerSearchOrder"] = dns;  
                    outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);  
                }  
            }  
        }          

        /// <summary>  
        /// 啟用DHCP伺服器  
        /// </summary>  
        public static void EnableDHCP()  
        {  
            ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");  
            ManagementObjectCollection moc = wmi.GetInstances();  
            foreach (ManagementObject mo in moc)  
            {  
                //如果沒有啟用IP設定的網絡裝置則跳過  
                if (!(bool) mo["IPEnabled"])  
                    continue;                 
                //重置DNS為空  
                mo.InvokeMethod("SetDNSServerSearchOrder", null);  
                //開啟DHCP  
                mo.InvokeMethod("EnableDHCP", null);  
            }  
        }          

        /// <summary>  
        /// 判斷是否符合IP位址格式  
        /// </summary>  
        /// <param name="ip"></param>  
        /// <returns></returns>  
        public static bool IsIPAddress(string ip)  
        {  
            //将完整的IP以“.”為界限分組  
            string[] arr = ip.Split('.');  


            //判斷IP是否為四組數組成  
            if (arr.Length != )  
                return false;              


            //正規表達式,1~3位整數  
            string pattern = @"\d{1,3}";  
            for (int i = ; i < arr.Length; i++)  
            {  
                string d = arr[i];  


                //判斷IP開頭是否為0  
                if (i ==  && d == "0")  
                    return false;  


                //判斷IP是否是由1~3位數組成  
                if (!Regex.IsMatch(d, pattern))  
                    return false;              

                if (d != "0")  
                {  
                    //判斷IP的每組數是否全為0  
                    d = d.TrimStart('0');  
                    if (d == "")  wwwcto.com
                        return false;          

                    //判斷IP每組數是否大于255  
                    if (int.Parse(d) > )  
                        return false;  
                }  
            }            return true;  
        }  
    }  
}  

好了,寫好上面這個類以後,就等着哪裡需要然後NEW一個就可以了。很簡單吧,如果遇到設定失敗的情況,可能是因為權限不夠,請參考C#預設以管理者身份運作程式
           
http://www.cnblogs.com/chengulv/archive/2012/12/29/2839303.html