修改IP地址的帖子已经很多了,其中主要有两种:
一种是通过netsh命令来修改,如:
netsh interface ip set address 本地连接 static 192.168.0.1 255.255.255.0 127.0.0.1 1
上面的命令即查将一个名为本地连接的网卡设置为
一个静态IP:192.168.0.1
其子网掩码为:255.255.255.0
网关为:127.0.0.1
默认网关的跳跃数为1另外一种即是通过修改注册表来实现,但我却遇到一点麻烦:
当我通过UdfWriteString修改注册表中网卡的IP地址后,
再通过网络属性查看之,在《常规》页面中,显示修改后
的IP地址,但在《高级》页面中的IP地址栏却出现乱码。其图形见:
http://photo.163.com/openpic.php?user=szduanhai&pid=256704227&_dir=%2F11527644
不同的电脑上,出现的画面可能不一样我打开注册表,查看相应位置的设置,均显示正常
其相关代码如下:
//------------------------------------------------------------------------------
//写字符串
//------------------------------------------------------------------------------
procedure UdfWriteString(const AKey, AName, AValue: string);
var
  R: TRegistry;
  RDI: TRegDataInfo;
begin
  if AKey = '' then Exit;  R := TRegistry.Create;
  try
    R.RootKey := HKEY_LOCAL_MACHINE;    if R.OpenKey(AKey, TRUE) then
    begin
      if R.GetDataInfo(AName, RDI) then
      begin
        if RDI.RegData = rdString then
          R.WriteString(AName, AValue)
        else
        begin
          Windows.RegSetValueEx(R.CurrentKey, PChar(AName), 0,
            REG_MULTI_SZ, @AValue[1], Length(AValue));
        end;
      end;
    end;
  finally
    R.Free;
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  UdfWriteString(
    'SYSTEM\ControlSet001\Services\Tcpip\Parameters\' + 
      'Interfaces\{CEF8D3FB-0D3A-447E-BDCD-2620F14F1B19}',
    'IPAddress', '192.168.0.120');
end;恳请各位同仁解惑......附搜索的一篇帖子:
http://search.csdn.net/Expert/topic/2469/2469470.xml?temp=2.605617E-03

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      UdfWriteString(
        'SYSTEM\ControlSet001\Services\Tcpip\Parameters\' + 
          'Interfaces\{CEF8D3FB-0D3A-447E-BDCD-2620F14F1B19}',
        'IPAddress', '192.168.0.120');
    end;
    ===========================================================
    改为:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      UdfWriteString(
        'SYSTEM\ControlSet001\Services\Tcpip\Parameters\' + 
          'Interfaces\{CEF8D3FB-0D3A-447E-BDCD-2620F14F1B19}',
        'IPAddress', '192.168.0.120'+#0#0#0#0);
    end;
      

  2.   

    或者:
    procedure UdfWriteString(const AKey, AName, AValue: string);
    var
      R: TRegistry;
      RDI: TRegDataInfo;
      p:Pointer;
    begin
      if AKey = '' then Exit;  R := TRegistry.Create;
      try
        R.RootKey := HKEY_LOCAL_MACHINE;    if R.OpenKey(AKey, TRUE) then
        begin
          if R.GetDataInfo(AName, RDI) then
          begin
            if RDI.RegData = rdString then
              R.WriteString(AName, AValue)
            else
            begin
              GetMem(p,Length(AValue)+4);
              ZeroMemory(p,Length(AValue)+4);
              CopyMemory(p,PChar(AValue),Length(AValue));
              Windows.RegSetValueEx(R.CurrentKey, PChar(AName), 0,
                REG_MULTI_SZ, p, Length(AValue)+4);
              FreeMem(p);
            end;
          end;
        end;
      finally
        R.Free;
      end;
    end;
      

  3.   

    学习,以前都是用ShellExecute调用 netsh搞的
      

  4.   

    可以考虑使用IPHlpAPI来做的可参看http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_21467960.htmlIP Helper API可以在JEDI下载的http://lysoft.7u7.net
      

  5.   

    还有
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getipaddrtable.asphttp://www.pcdog.com/tech/html/200521/12200513787_1.htm
      

  6.   

    to heluqing(鉴之小河〖挣大钱娶美女〗) 
    我是在上個月的月底升星星的,當時還真想也來一個散分貼
    但想想,還是沒有發,看來我也得發一個了,呵呵~~~
    敬請關注to unsigned(僵哥(当程序语言成为普及的第三语言之后……)) 
    謝謝你的解答,你的答案是正確的to ly_liuyang(Liu Yang)
    也感謝你的回答