幸运星空

Lucker的程序人生

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

需求:笔记本经常要在不同的地点连接网络,而各地的网络IP配置各不相同,这就导致不时的更改网卡的IP地址设置。Windows上更改IP设置很不方便,于是希望能够开发一款能够适用于不同网络,不同网卡的快速IP地址切换程序。

分析:关键在于如何实现对网络适配器的配置。其实,MS为我们提供了System.Management 命名空间下的ManagementClass类,通过它我们可以获取和设置电脑上所有适配器的信息。其次,就是要实现对配置信息的存储,这个就简单了,可以通过将网卡信息序列化后保存到文件中,然后经反序列化取出。

实现:解决了上面两个问题,一切就简单了。那就让我们开始吧,最终效果如图:(下载地址

image

这里我们着重了解一下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服务器等项目的配置了。

《完》

posted on 2010-01-07 18:19  Lucker  阅读(3701)  评论(5编辑  收藏  举报