用DELPHI如何检测多网卡,并且设置每个网卡的IP,网关,DNS????急急急!!!! 用DELPHI如何检测多网卡,并且设置每个网卡的IP,网关,DNS????急急急!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先进入命令提示行:“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 offrem eth //eth 为网卡名称,可在网络连接中查询,如"本地链接"set eth="本地链接"rem ip //ip 为你想更改的IPset ip=192.168.4.23rem gw //gw 为网关地址set gw=192.168.4.1rem netmasks //netmasks 为子网掩码set netmasks=255.255.255.192echo 正在将本机IP更改到: %ip%remif %gw%==none netsh interface ip set address %eth% static %ip% %netmasks% %gw% > nulif not %gw%==none netsh interface ip set address %eth% static %ip% %netmasks% %gw% 1 > nulecho.........................echo 检查当前本机IP:ipconfigecho.........................echo 成功将本机IP更改为%ip%!pauseclose 在注册表中也有具体键值记不清了,baidu 一下 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCardsNetworkCards得分支表示各个网卡的信息通过ServiceName到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下找到对应的网卡配置详细信息,通过对注册表的read与write实现修改ip地址等信息,修改成功后应该需要重起生效 jedi上有IPHlpAPI的声明和例子ftp://ftp.delphi-jedi.org/api/IPHlpAPI.zipDemos\IpTest里是例子代码,很全的 再贴一个http://blog.csdn.net/lzlyh/archive/2007/04/06/1553652.aspx 检测网卡-----------------------------------------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; 检测网卡----------------------------------------- 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函数 DBGRid如何自定义显示 treeview递归问题 MDI窗体的问题! 请问,如果用DELPHI做这样的外挂,需要什么技术? 纵向打印,为何让我如此困惑。请各位高手进行帮帮我吧?谢谢了! 我的nt服务程序为什么不执行? 怎样用delphi调出IE? 怎样拦截Delphi的错误信息并用自己的信息代替? 有谁用过爱立信的T29sc吗? 8000元的工作!只需回答一个问题! indy post ehlib导出数据的时候想加一个进度条显示导出状态!
输入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
NetworkCards得分支表示各个网卡的信息通过ServiceName到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下找到对应的网卡配置详细信息,通过对注册表的read与write实现修改ip地址等信息,修改成功后应该需要重起生效
ftp://ftp.delphi-jedi.org/api/IPHlpAPI.zipDemos\IpTest里是例子代码,很全的
http://blog.csdn.net/lzlyh/archive/2007/04/06/1553652.aspx
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;
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函数