读书人

用Delphi编制IP地址转换器解决思路

发布时间: 2012-03-11 18:15:38 作者: rapoo

用Delphi编制IP地址转换器
现在学校和公司的朋友们大都遇到过这种情况吧:计算机需要经常在互联网和局域网之间转换,每次转换除了换网线外,还需要修改网络配置(IP地址、网关、DNS等等),相当麻烦。如何能在一个窗口中一步实现呢?有些公司提供了软件如:IPChanger、EasyProxy等等,但是很遗憾这些软件都不是免费软件,只能试用一段时间。

  因此,笔者经过尝试,调试出一个非常简单、易行的方法,供大家参考使用。

  首先看一下原理:

  Window的netsh命令通过创建和调用记录网络配置的文本文件即可修改网络配置。主要包括一下两个命令:

Netsh interface dump > 相对路径\ netcfg1.txt

  这条命令可以将计算机现有的网络配置保存在netcfg1.txt文件中。

Netsh -f netcfg1.txt

  这条命令即可将netcfg1.txt文件中保存的网络配置应用到计算机中。

  基于以上的两条命令,笔者利用Delphi6.0编制小程序,将它进一步完善。运行结果如下图所示:
图链接http://www.tommstudio.com/articles/117355.jpg

   如上图所示,小软件主要功能分成两部分:网络设置和网络替换。因为一个计算机绝大多数是在两个网络中互换,所以本程序只实现了两个网络的互换,更多的网络间互换道理是相同的。

  网络设置 "互联网 "和 "局域网 "两个Button的单击事件是将左侧网络设置区的IP地址、网关、DNS等信息记录到文本中。其中遇到的两个主要困难是IP地址的录入时的出错情况处理和保存文本文件。

代码如下:


procedure TForm1.BitBtn2Click(Sender: TObject); // "局域网 "按钮的单击事件
begin
 FileAppendProc1();
 RadioButton2.Checked:=true;
end;
procedure TForm1.FileAppendProc1(); //保存文件的函数
 var NetFile : TextFile;
 NetFilename : string;
 FileAppend,tempStr : string;
begin
 NetFilename := 'netcfg2.txt ';
 FileAppend :=S5+MaskEdit1.Text+S1+MaskEdit2.Text+S2+MaskEdit3.Text+S3+S4;
 //MessageDlg( 'This is commend '+FileAppend,mtInformation,[mbOK],0);
 AssignFile(Netfile, 'net.txt '); //net.txt文件要放在应用程序的同一目录中
 Reset(NetFile);
 begin
 try
  Memo1.Lines.Text:= ' ';
  while not Eof(NetFile) do
  begin
   Readln(NetFile,tempStr);
   Memo1.Lines.Add(tempStr) ;
  end;
  finally
 begin
  CloseFile(NetFile);
 end;
end;
AssignFile(Netfile,NetFilename);
Rewrite(NetFile);
try
 Writeln(NetFile, ' ');
 finally
 CloseFile(NetFile);
end;
 Memo1.Lines.Add(FileAppend);
 Memo1.Lines.SaveToFile(NetFilename);
end;
end;

procedure TForm1.MaskEdit1Exit(Sender: TObject); //IP地址输入出错处理
 var ip1,ip2,ip3,ip4: Integer;
begin
 if (copy(MaskEdit1.Text,1,3)= ' ') or (copy(MaskEdit1.Text,5,3)= ' ') or  (copy(MaskEdit1.Text,9,3)= ' ') or (copy(MaskEdit1.Text,13,3)= ' ') then


 begin
  showmessage( '请注意,不能有空域值 ') ;
  MaskEdit1.SetFocus;
 end;
 if (copy(MaskEdit1.Text,1,3) <> ' ') and (copy(MaskEdit1.Text,5,3) <> ' ') and   (copy(MaskEdit1.Text,9,3) <> ' ') and (copy(MaskEdit1.Text,13,3) <> ' ') then
 begin
  ip1:=strtoint(trim(copy(MaskEdit1.Text,1,3)));
  ip2:=strtoint(trim(copy(MaskEdit1.Text,5,3)));
  ip3:=strtoint(trim(copy(MaskEdit1.Text,9,3)));
  ip4:=strtoint(trim(copy(MaskEdit1.Text,13,3)));
  if (ip1 <0) or (ip1> 254) or (ip2 <0) or (ip2> 254) or(ip3 <0) or (ip3> 254) or (ip4 <0) or (ip4> 254) then
  begin
   showmessage( '您的输入不正确,请重新输入! ');
   MaskEdit1.SetFocus;
  end;
 end;
end;



  右侧网络替换功能的编制相对简单些,通过两个radiobutton控件选择要使用哪个网络,然后点击 "确定 "按钮即可。


procedure TForm1.Button1Click(Sender: TObject); // "确定 "按钮的单击事件
begin
  if RadioButton1.Checked then winexec( 'netsh -f netcfg1.txt ',sw_normal) ;
  if RadioButton2.Checked then winexec( 'netsh -f netcfg2.txt ',sw_normal) ;
end;



  这样,功能就实现了,这个小软件简单易用,在我周围的同学中已经广为流传,希望大家能够从中学习到简单易行的网

[解决办法]
哥们,这篇文章好像在哪里见过,内容一模一样,当时看的还有图片。
[解决办法]
写的不错!~给你顶起来!~
[解决办法]
3q
[解决办法]
关注

读书人网 >.NET

热点推荐