一个写给Notebook用户的小程序 IpAddressChange

类别:.NET开发 点击:0 评论:0 推荐:

发现好长时间没写技术方面的东西了,不免有些生疏了,这几天工作状态不错,随便写点东西吧。

好多用notebook的朋友比较苦恼的一个问题,在公司和在家里的网络设置不一样,于是上班和回到家的时候都要更改网卡的网络设置。

我也是比较烦这个东西,每天改来改去的很麻烦,今天心血来潮,决定写一个小程序简化一下这个步骤。

查了一下dotnet相关方面的东西和文章,发现的确可行。

using System.Management 这个里面封装了这些东东,

网卡的设置无非就是四项,IP地址,子网掩码,网关,DNS

设置四个string型变量:

  private string ipaddress;
  private string subcode;
  private string netgate;
  private string dns;

  private string IpAddree
  {
   set
   {
    ipaddress=value;
   }
   get
   {
    return ipaddress;
   }
  }
  private string SubCode
  {
   set
   {
    subcode=value;
   }
   get
   {
    return subcode;
   }
  }
  private string NetGate
  {
   set
   {
    netgate=value;
   }
   get
   {
    return netgate;
   }
  }

  private string Dns
  {
   set
   {
    dns=value;
   }
   get
   {
    return dns;
   }
  }

利用下面这个方法来更改网卡设置:

  private void changeip()
  {
   ManagementBaseObject inPar = null;
   ManagementBaseObject outPar = null;
   ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection moc = mc.GetInstances();
    //遍历所有在工作状态的网卡

   foreach(ManagementObject mo in moc)
   {
    if(! (bool) mo["IPEnabled"])
     continue;

    //Set IPAddress & SubnetMask
    inPar = mo.GetMethodParameters("EnableStatic");
    inPar["IPAddress"] = new string[] { IpAddree };
    inPar["SubnetMask"] = new string[] { SubCode };
    outPar = mo.InvokeMethod("EnableStatic", inPar, null);

    //set Getway
    inPar = mo.GetMethodParameters("SetGateways");
    inPar["DefaultIPGateway"] = new string[]{ NetGate };
    outPar = mo.InvokeMethod("SetGateways", inPar, null);

    //set dns
    inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
    inPar["DNSServerSearchOrder"] = new string[] { Dns};
    outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
    
   }
  }

 就是这么简单,根据以上的办法去msdn的库里面查下相关方面的东西,网卡的大多数属性都是可以通过.net程序来更改的。

下面是程序的全部代码:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Management;

namespace IpAdd
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.ComboBox cbbAddress;
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;

  private string ipaddress;
  private string subcode;
  private string netgate;
  private string dns;

  private string IpAddree
  {
   set
   {
    ipaddress=value;
   }
   get
   {
    return ipaddress;
   }
  }
  private string SubCode
  {
   set
   {
    subcode=value;
   }
   get
   {
    return subcode;
   }
  }
  private string NetGate
  {
   set
   {
    netgate=value;
   }
   get
   {
    return netgate;
   }
  }

  private string Dns
  {
   set
   {
    dns=value;
   }
   get
   {
    return dns;
   }
  }

  public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   this.cbbAddress = new System.Windows.Forms.ComboBox();
   this.button1 = new System.Windows.Forms.Button();
   this.SuspendLayout();
   //
   // cbbAddress
   //
   this.cbbAddress.Items.AddRange(new object[] {
               "192.168.6.14",
               "192.168.1.9",
               "192.168.0.9"});
   this.cbbAddress.Location = new System.Drawing.Point(72, 16);
   this.cbbAddress.Name = "cbbAddress";
   this.cbbAddress.Size = new System.Drawing.Size(144, 20);
   this.cbbAddress.TabIndex = 0;
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(104, 64);
   this.button1.Name = "button1";
   this.button1.TabIndex = 1;
   this.button1.Text = "更  改";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(288, 141);
   this.Controls.Add(this.button1);
   this.Controls.Add(this.cbbAddress);
   this.Name = "Form1";
   this.Text = "更改IP地址";
   this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

  private void button1_Click(object sender, System.EventArgs e)
  {
   if(cbbAddress.Text.ToString()!="")
   {
    this.IpAddree = cbbAddress.Text.ToString();
    if(IpAddree=="192.168.1.9")
    {
     this.SubCode = "255.255.255.0";
     this.NetGate = "192.168.1.1";
     this.Dns = "202.106.0.20";
    }
    else if(IpAddree=="192.168.6.14")
    {
     this.SubCode = "255.255.255.0";
     this.NetGate = "192.168.6.250";
     this.Dns = "192.168.0.10";
    }
   }

   changeip();

   MessageBox.Show("ip地址更改完毕");
  }

  private void changeip()
  {
   ManagementBaseObject inPar = null;
   ManagementBaseObject outPar = null;
   ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection moc = mc.GetInstances();

   foreach(ManagementObject mo in moc)
   {
    if(! (bool) mo["IPEnabled"])
     continue;

    //Set IPAddress & SubnetMask
    inPar = mo.GetMethodParameters("EnableStatic");
    inPar["IPAddress"] = new string[] { IpAddree };
    inPar["SubnetMask"] = new string[] { SubCode };
    outPar = mo.InvokeMethod("EnableStatic", inPar, null);

    //set Getway
    inPar = mo.GetMethodParameters("SetGateways");
    inPar["DefaultIPGateway"] = new string[]{ NetGate };
    outPar = mo.InvokeMethod("SetGateways", inPar, null);

    //set dns
    inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
    inPar["DNSServerSearchOrder"] = new string[] { Dns};
    outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
    
   }
  }


 }
}

嘿嘿  现在再也不用手工更改网络设置那么麻烦了。

其实这个东西完全可以写一个config文件,功能变得更强大一点。不过最近时间比较紧,写这些东西仅仅有一个小时不到的时间,周末就要回大连了。等考完试有时间再看看吧。

本文地址:http://com.8s8s.com/it/it42116.htm