用DELPHI如何检测多网卡,并且设置每个网卡的IP,网关,DNS????急急急!!!!

解决方案 »

  1.   

    首先进入命令提示行:“Win+R”>“cmd”,回车
    输入netsh,回车,出现:netsh>
    再输入interface,回车,出现netsh interface>
    再输入ip,回车,出现netsh interface ip>进入IP设置项了,我们要用到以下的命令:
    set address    - 添加一个 IP 地址到指定的接口。先看看关于此令的windows帮助:
    --------------------------------------------------------------------------
    用法: set address [name=]<string>
          [[source=]dhcp |
           [source=] static [addr=]IP address [mask=]IP subnet mask]
          [[gateway=]<IP address>|none [gwmetric=]integer]参数:     标记           值
         name         - 接口名称。
         source       - 下列值之一:
                        dhcp: 对于指定接口,设置用 DHCP 配置 IP
                              地址。
                        static: 设置使用本地静态配置设置 IP
                                地址。     gateway      - 下列值之一:
                        <IP address>: 您设置的 IP 地址的指定默认
                                      网关。
                        none: 不设置默认网关。
         gwmetric     - 默认网关的跃点数。如果网关设置为 'none',则
                        不应设置此字段。
         只有在 'source' 为 'static' 时才设置下列选项:     addr         - 指定接口的 IP 地址。
         mask         - 指定 IP 地址的子网掩码。注释   : 用来将 IP 地址配置模式从 DHCP 模式改为 static,或从 static
            模式改为 DHCP。用静态 IP 地址在接口上添加 IP 地址,或添加
            默认网关。
    示例   :      set address name="Local Area Connection" source=dhcp
          set address local static 10.0.0.9 255.0.0.0 10.0.0.1 1
    ----------------------------------------------------------------------------了解了用法之后,我们就可以进行设置了:
    在netsh interface ip>之后输入
    set address "本地连接" static 192.168.4.23 255.255.255.192 192.168.4.1 1
    然后回车,稍候会显示“确定”,IP设置完毕。
    这里解释一下,“本地连接”是指Windows“网络属性”中看到的连接的名称,static表示要指定静态IP而非DHCP指派,后面三个分别是IP,子网掩码,网关,最后的“1”是指默认网关的跃点数,一般为“1”。至此,命令行下设置IP完成。
    同时你还可以在命令行下更改DNS设置,用的是set dns命令,你可以输入set dns /?查看使用方法。最后,我们将这些命令保存为一个BAT文件(setIP192168423.bat):@echo off
    rem eth //eth 为网卡名称,可在网络连接中查询,如"本地链接"
    set eth="本地链接"
    rem ip //ip 为你想更改的IP
    set ip=192.168.4.23
    rem gw //gw 为网关地址
    set gw=192.168.4.1
    rem netmasks //netmasks 为子网掩码
    set netmasks=255.255.255.192echo 正在将本机IP更改到: %ip%
    rem
    if %gw%==none netsh interface ip set address %eth% static %ip% %netmasks% %gw% > nul
    if not %gw%==none netsh interface ip set address %eth% static %ip% %netmasks% %gw% 1 > nul
    echo.........................
    echo 检查当前本机IP:
    ipconfig
    echo.........................
    echo 成功将本机IP更改为%ip%!
    pause
    close
      

  2.   

    在注册表中也有具体键值记不清了,baidu 一下
      

  3.   

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下
      

  4.   

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards
    NetworkCards得分支表示各个网卡的信息通过ServiceName到
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下找到对应的网卡配置详细信息,通过对注册表的read与write实现修改ip地址等信息,修改成功后应该需要重起生效
      

  5.   

    jedi上有IPHlpAPI的声明和例子
    ftp://ftp.delphi-jedi.org/api/IPHlpAPI.zipDemos\IpTest里是例子代码,很全的
      

  6.   

    再贴一个
    http://blog.csdn.net/lzlyh/archive/2007/04/06/1553652.aspx
      

  7.   

    检测网卡-----------------------------------------
    Procedure TF_main.GetCard;
    var
      reg:TRegistry;
      i:integer;
      name:array [0..255] of char;
      ID:string;
      lS:TStrings;
    begin
      ls:=TStringlist.Create;
      reg:=TRegistry.Create;
      name:='';
      reg.RootKey:=HKEY_LOCAL_MACHINE;
      ID:='SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\';
      reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards',false);
      Reg.GetKeyNames(Ls);
      for i:=0 to Ls.Count-1 do
      begin
        reg.CloseKey;
        reg.OpenKey(ID+ls.Strings[i],false);
        combobox1.Items.Add(reg.ReadString('Description'));
        CardIdLt.Add(reg.ReadString('Description'));
        CardIdLt.Add(reg.ReadString('ServiceName'));
      end;
      combobox1.ItemIndex:=-1;
      ls.Free;
      reg.Free;
    end;
    查询ip-----------------------------------------
    procedure Tf_main.ComboBox1Select(Sender: TObject);
    var
      reg:TRegistry;
      n_ip:array [0..255] of char;
      ID,CardNum:string;
      Psize:Dword;
    begin
      reg:=TRegistry.Create;
      name:='';
      reg.RootKey:=HKEY_LOCAL_MACHINE;
      cardNum:=inttostr(combobox1.ItemIndex+1);
      //reg.CloseKey;
      if length(CardNum) < 2 then
        CardNum:='00'+CardNum;
      if LengTh(CardNum) < 3 then
        CardNum:='0'+CardNum;
      reg.OpenKey('SYSTEM\ControlSet'+CardNum+'\Services',false);
      reg.OpenKey('Tcpip\Parameters\Interfaces',false);
      ID:=CardIdLt.Strings[CardIDLt.IndexOf(combobox1.Text)+1];
      //messagedlg(id,mtError,[mbOK],0);
      reg.OpenKey(id,false);
      RegqueryValueEx(reg.CurrentKey,'IPAddress',nil,nil,@n_ip,@Psize);
      //这里加上查询dns,,gate即可,网关可以直接用reg.readstring即可
      edit6.Text:=n_ip;
      Reg.CloseKey;
      reg.Free;
    end;
      

  8.   

    检测网卡----------------------------------------- 
    Procedure TF_main.GetCard; 
    var 
      reg:TRegistry; 
      i:integer; 
      name:array [0..255] of char; 
      ID:string; 
      lS:TStrings; 
    begin 
      ls:=TStringlist.Create; 
      reg:=TRegistry.Create; 
      name:= ' '; 
      reg.RootKey:=HKEY_LOCAL_MACHINE; 
      ID:= 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\ '; 
      reg.OpenKey( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards ',false); 
      Reg.GetKeyNames(Ls); 
      for i:=0 to Ls.Count-1 do 
      begin 
        reg.CloseKey; 
        reg.OpenKey(ID+ls.Strings[i],false); 
        combobox1.Items.Add(reg.ReadString( 'Description ')); 
        CardIdLt.Add(reg.ReadString( 'Description ')); 
        CardIdLt.Add(reg.ReadString( 'ServiceName ')); 
      end; 
      combobox1.ItemIndex:=-1; 
      ls.Free; 
      reg.Free; 
    end; 
    查询ip----------------------------------------- 
    procedure Tf_main.ComboBox1Select(Sender: TObject); 
    var 
      reg:TRegistry; 
      n_ip:array [0..255] of char; 
      ID,CardNum:string; 
      Psize:Dword; 
    begin 
      reg:=TRegistry.Create; 
      name:= ' '; 
      reg.RootKey:=HKEY_LOCAL_MACHINE; 
      cardNum:=inttostr(combobox1.ItemIndex+1); 
      //reg.CloseKey; 
      if length(CardNum)  < 2 then 
        CardNum:= '00 '+CardNum; 
      if LengTh(CardNum)  < 3 then 
        CardNum:= '0 '+CardNum; 
      reg.OpenKey( 'SYSTEM\ControlSet '+CardNum+ '\Services ',false); 
      reg.OpenKey( 'Tcpip\Parameters\Interfaces ',false); 
      ID:=CardIdLt.Strings[CardIDLt.IndexOf(combobox1.Text)+1]; 
      //messagedlg(id,mtError,[mbOK],0); 
      reg.OpenKey(id,false); 
      RegqueryValueEx(reg.CurrentKey, 'IPAddress ',nil,nil,@n_ip,@Psize); 
      //这里加上查询dns,,gate即可,网关可以直接用reg.readstring即可 
      edit6.Text:=n_ip; 
      Reg.CloseKey; 
      reg.Free; 
    end; 
    设置和读取基本一样,就是用个RegSetValueEx函数