Interfaceinfo);
Interfaceinfo := Allocmem(Bufsize);
try
Res := GetInterfaceInfo(InterfaceInfo, @BufSize);
if Res = NO_ERROR then
begin
for i:=0 to IndexStrs.Count-1 do
begin
dwindex:=StrToInt(IndexStrs[i]);
for Cnt := 0 to InterfaceInfo^.NumAdapters - 1 do
if InterFaceInfo^.Adapter[cnt].index = dwIndex then
Suc := IpReleaseAddress(InterFaceInfo^.Adapter[cnt]);
if Suc = NO_ERROR then showmessage('' 释放IP成功! '');
end; // for i:=0 to释放所有IP
for i:=0 to IndexStrs.Count-1 do
begin
dwindex:=StrToInt(IndexStrs[i]);
for Cnt := 0 to InterfaceInfo^.NumAdapters - 1 do
if InterFaceInfo^.Adapter[cnt].index = dwIndex then
Suc := IpReNewAddress(InterFaceInfo^.Adapter[cnt]);
if Suc = NO_ERROR then showmessage('' 重新获得IP成功! '');
end; // for i:=0 to重新获得所有IP
end;
finally
FreeMem(InterFaceInfo);
end;
end;
IndexStrs.Free;
end;
Button2的Click事件:用IndexStrs中的值匹配网络接口信息中Index,找到相应的适配器释放IP地址,通过循环释放、重新获得所有IP地址。
3.2 在Delphi中使用Netsh 实用
程序改变网络配置。
在Windows2000以后的操作系统中都提供了Netsh.exe实用程序。Netsh 是一种命令行实用
程序,一般从命令提示符启动 netsh 并更改到包含要使用的命令的上下文,可用来显示或修改当前正在运行的
计算机的网络配置,下面说明在Delphi中使用它改变网络配置。
procedure TForm1.Button3Click(Sender: TObject);
begin
ShellExecute(Handle, ''open'', ''netsh'', PChar(''interface ip set address "本地连接" static 192.168.0.10 255.255.255.0 192.168.0.1 1''), nil, SW_HIDE);
end;
无论当前系统IP地址是动态还是静态,Button3Click事件把当前网络配置改为静态IP地址192168.0.10,子网掩码255.255.255.0,网关:192.168.0.1,跃点数:1;同样执行ShellExecute(Handle, ''open'', ''netsh'', PChar(''interface ip set address "本地连接" dhcp''), nil, SW_HIDE)把本地IP地址改为动态。netsh功能强大,通过此种形式可修改、删除、增加DNS、WINS、gateway等网络配置信息,而且更改的信息直接生效,不需要“禁用”→“启用” 网卡或重新启动windows。
四、结束语
实际上通过修改系统注册表也可改变系统的IP地址等网络配置。不同版本操作系统网络配置信息在注册表中的位置不同。针对win95、win98系统的静态IP地址通过修改注册表来改变IP配置信息,不过所有通过修改系统
注册表项改变的IP配置信息需经过 “禁用”→“启用” 网卡或重新启动windows才能生效。另外值得注意的是IP Help API针对win95无效。
参考文献:
[1] PlatForm SDK: IP Helper. http://msdn.microsoft.com/library/default.
asp [DB/OL],2004 – 01.
[2] Steve Teixeira,Xavier Pacheco. Delphi 5开发人员指南[M]. 任旭钧 等译.北京:机械工业出版社,2000.