Delphi判断网络链接
/*Title:Delphi判断网络链接
*Author:Insun
*Blog:http://yxmhero1989.blog.163.com
*From:www.4safer.com
/
Delphi判断网络链接,主要3个方面:判断是否有网络连接;判断网络连接方式;禁用/启用 本地网络连接 。
判断网络连接一定要即时的,不要拔了网线还提示有网络连接。
1。URL.DLL中的InetIsOffline函数。
Delphi中没有对该函数进行声明,所以我们要自己声明,写在implementation下面OK。函数申明为:
function InetIsOffline(Flag: Integer): Boolean; stdcall; external URL.DLL;然后就可以调用函数判断系统是否连接到INTERNET
if InetIsOffline(0) then ShowMessage(没有连接到网络)
else ShowMessage(已经连接到网络);
该函数返回TRUE说明本地系统没有连接到INTERNET。
附:
大多数装有IE或OFFICE97的系统都有此DLL可供调用。
InetIsOffline
BOOL InetIsOffline(
DWORD dwFlags,
);测试这个不即时,老是显示Connected,已经连接到网络。
2。Delphi里面的TcpServer。很郁闷的是也不即时。
示例:
procedure TForm1.FormCreate(Sender: TObject);
begin
try
TcpServer1.Active :=True ;
ShowMessage(网络已连接)except
ShowMessage(网络没连接);
end;
end;
3。InternetGetConnectedState
在DELPHI中 引用wininet这个单元就可以直接使用 InternetGetConnectedState函数了,下面给出一个判断当前网络连接状态的函数,在注释中会一一解释它的一些相关返回值的含义。网上都是定义为ConnectionKind这个函数,好默契。uses wininet; //这个已经说了 必须引用它才可以使用InternetGetConnectedState函数function ConnectionKind :boolean;
var flags: dword;
begin
Result := InternetGetConnectedState(@flags, 0);
if Result then
begin
if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then showmessage(在线:拨号上网);
if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then showmessage(在线:通过局域网);
if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then showmessage(在线:代理);
if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSY then showmessage(MODEM被其他非INTERNET连接占用);
end; //if
end; //function过程结束 下面说下各各返回值的意思:
INTERNET_CONNECTION_MODEM: //现在是通过拨号方式上网的
INTERNET_CONNECTION_LAN: //现在是通过局域网上网的
INTERNET_CONNECTION_PROXY: //现在是通过代理上网的
INTERNET_CONNECTION_MODEM_BUSY: //现在MODEM被其他非INTERNET连接占用(离线)经过测试, InternetGetConnectedState函数 不像某些人说的不即时,倒是很即时,一般都对。
4。IsNetworkAlive
Delphi中没有对这个函数进行声明,所以我们要自己声明,可以在var下,也可在implementation下。
Function IsNetworkAlive(var lpdwFlagsLib:Integer):Integer;stdcall;externalSENSAPI.DLL;
还有要定义三个常量:
Const NETWORK_ALIVE_LAN = 1; //通过局域网上网
Const NETWORK_ALIVE_WAN = 2; //通过广域网上网
Const NETWORK_ALIVE_AOL = 4; //仅对9895有效判断是否联上美国网络网络上历久弥新的不变给出的还是这个过程。
判断常常出问题,一般不推荐。
procedure ShowNetWorkState();
var
falg:integer;
Bos:boolean;
begin
Bos:=false;
IsNetworkAlive(falg);
case falg of
NETWORK_ALIVE_LAN:
begin
Showmessage(通过局域网上网。);
Bos:=true;
end;
NETWORK_ALIVE_WAN:
begin
Showmessage(通过广域网上网。);
Bos:=true;
end;
NETWORK_ALIVE_AOL:
begin
Showmessage(联上美国的网络。); //仅对9895有效所以一般不用判断NETWORK_ALIVE_AOL
Bos:=true;
end;
else Showmessage(没有联网。);
end; //case
if<
补充:软件开发 , Delphi ,