delphi检测本机的网络连接状态的三种方法


参加学院的开发大赛,需要用到检测网络连接状态的功能,在网上找了下,找到了三种方法,

总结一下,备忘...

1、添加单元 wininet

然后调用 BOOL InternetGetConnectedState(   LPDWORD lpdwFlags, DWORD dwReserved );这个API函数

参数lpdwFlages可以为以下的组合或者不进行初始化:

INTERNET_CONNECTION_MODEM 拨号上网
INTERNET_CONNECTION_LAN 通过局域网上网
INTERNET_CONNECTION_PROXY 使用代理上网
INTERNET_CONNECTION_MODEM_BUSY MODEM被其他非INTERNET连接占用(离线)

代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
Types:DWORD;
begin
if InternetGetConnectedState(@Types,0) then
begin
if (types and INTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEM then
Edit1.Text:='拨号上网';
if (types and INTERNET_CONNECTION_LAN )=INTERNET_CONNECTION_LAN then
Edit1.Text:='通过局域网上网';
if (types and INTERNET_CONNECTION_PROXY )=INTERNET_CONNECTION_PROXY then
Edit1.Text:='使用代理上网';
if (types and INTERNET_CONNECTION_MODEM_BUSY )=INTERNET_CONNECTION_MODEM_BUSY then
Edit1.Text:='不在线';
end;
end;

据说这种方法不是太即时的,有时候连接了显示无连接,无连接时显示连接,我也没遇到过...

2、试用IsNetworkAlive函数

Delphi中没有对这个函数进行声明,所以我们要自己声明,请把下面的代码加入到当前窗体或者单元的 声明全局变量的地方 也就是第一个var下面。

Function IsNetworkAlive(var lpdwFlagsLib:Integer):Integer;stdcall;external ‘SENSAPI.DLL’;

还要声明三个常量

Const NETWORK_ALIVE_LAN = 1; //通过局域网上网
Const NETWORK_ALIVE_WAN = 2; //通过广域网上网
Const NETWORK_ALIVE_AOL = 4; //仅对98\95有效判断是否联上美国网络

调用代码如下:

procedure TForm1.Button2Click(Sender: TObject);
var
Flag:integer;
begin
IsNetworkAlive(flag);
case flag of
NETWORK_ALIVE_LAN:
begin
Edit2.Text:='局域网上网';
end;
NETWORK_ALIVE_WAN:
begin
Edit2.Text:='广域网上网';
end;
NETWORK_ALIVE_AOL:
begin
Edit2.Text:='联上美国的网络'; //仅对98\95有效所以一般不用判断NETWORK_ALIVE_AOL
end;
end;
end;

3、URL.DLL中的InetIsOffline函数

Delphi中没有对该函数进行声明,所以我们要自己声明,这跟上面的第二种方法的声明是同个道理
函数申明为:
function InetIsOffline(var Flag: Integer): Boolean; stdcall; external ‘URL.DLL’;

该函数返回TRUE说明本地系统没有连接到INTERNET。
附:
大多数装有IE或OFFICE97的系统都有此DLL可供调用。
InetIsOffline
BOOL InetIsOffline(
DWORD dwFlags,
);

代码如下:

procedure TForm1.Button3Click(Sender: TObject);
var Flag:integer;
begin
flag:=0;
if InetIsOffline(flag) then Edit3.Text:='没有连接到网络'
else Edit3.Text:='连接到网络';
end;



联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678