我按照网上写了个设置dns地址的,在win2003下执行没有结果主要代码如下
procedure TForm1.SetTCPIPDNSAddresses( sIPs : string );
var Ver : TOsVersionInfo;
begin
  Ver.dwOSVersionInfoSize:= SizeOf(Ver);
  GetVersionEx(Ver);
  if (Ver.dwPlatformId = VER_PLATFORM_WIN32_NT )  then
  begin
    // if using Windows NT
    SaveStringToRegistry_LOCAL_MACHINE('SYSTEM\CurrentControlSet' +
                                       '\Services\Tcpip\Parameters',
                                       'NameServer',
                                       sIPs );
  end
  else
  if (Ver.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS)  then
  // if using Windows 95
  begin
    SaveStringToRegistry_LOCAL_MACHINE(
      'SYSTEM\CurrentControlSet' +
      '\Services\VxD\MSTCP',
      'NameServer',
      sIPs );
  end;
end;
procedure TForm1.SaveStringToRegistry_LOCAL_MACHINE(sKey,sItem,sVal:string);
var reg: TRegIniFile;
begin
  reg := TRegIniFile.Create( '' );
  try
  begin
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.WriteString( sKey, sItem, sVal + #0 );
  end;
  finally
    reg.Free;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  SetTCPIPDNSAddresses('192.168.0.1 192.168.0.254');
end;

解决方案 »

  1.   

    这个代码,先是用GetVersionEx判断windows版本,再根据版本来修改注册表。
    它不能够识别win2003,所以没有结果。
    获取windows版本的代码,请参看:http://www.delphibbs.com/keylife/iblog_show.asp?xid=2786
    至于注册表,你自己在win2003用RegEdit来查找NameServer,估计路径和上面Windows NT的差不多,其它照搬。
      

  2.   

    我发现在注册表例的值已经发生了变化
    就在nameserver那里,值已经变成了
    192.168.0.1 192.168.0.254
    但是网络设置还是原来的
    不知道怎么回事
      

  3.   

    用改注册表的办法,改成功后不会立即生效,必须重启
    用netsh.exe或者IP Helper API改吧
      

  4.   

    我的delphi帮助文件不太全
    给点链接?
      

  5.   


    bool SetIpconfig(String strIP,String mask,String gateway)
    {
      AnsiString  strParam = " interface  ip  set  address  \"本地连接\"  static  ";
      strParam+= strIP+" "+mask+" "+gateway+" "+"1";
      try
      {
         ShellExecute(NULL,"open",  "netsh",strParam.c_str(),NULL,SW_HIDE);
      }
      catch(...)
      {
         return false;
      }
      return true;
    }bool SetDNS(String strDNS)
    {
      AnsiString  strParam = " interface  ip  set  dns  \"本地连接\"  static  ";
      strParam+= strDNS;
      try
      {
         ShellExecute(NULL,"open",  "netsh",strParam.c_str(),NULL,SW_HIDE);
      }
      catch(...)
      {
         return false;
      }
      return true;
    }
    这样就可以了,自己改delphi吧
      

  6.   

    这是netsh方法,还有其他办法么
      

  7.   

    DeleteIpForwardEntry
    SetIpForwardEntry
    具体参看MSDN
      

  8.   

    netsh比较稳当,但在网卡无连接的状态下要生效非常慢!!
      

  9.   

    回constantine(飘遥的安吉儿)
    我已经改成delphi的了
    但执行起来还是不行,我的平台是win2003 sp1
    没有结果