• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

用Delphi即时判断当前的网络的连接方式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请



判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中 InternetGetConnectedState就是不怎么够即时的API函数,而第二个使用的是IsNetworkAlive这个API函数,这个没有InternetGetConnectedState的那种问题,但是可能需要安装SDK,也就是.Net框架。

一、InternetGetConnectedState



在DELPHI中 引用wininet这个单元就可以直接使用 InternetGetConnectedState函数了,下面给出一个判断当前网络连接状态的函数,在注释中会一一解释它的一些相关返回值的含义。



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函数实现的判断网络状态的方法



--------------------------------------------------------------------------------


二、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 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('联上美国的网络。'); //仅对98\95有效所以一般不用判断NETWORK_ALIVE_AOL
Bos:=true;
end;
else Showmessage('没有联网。');
end; //case
if Bos then Showmessage('你现在是联网状态!')
else Showmessage('你现在是离线状态!');
end;



这个我就不多做解释了,上面的这两个方法是可以用来判断网络连接的方式,也可以用来判断网络是否连通。



--------------------------------------------------------------------------------


下面再介绍一个方法可以判断网络是否连通的。

三、URL.DLL中的InetIsOffline函数。

Delphi中没有对该函数进行声明,所以我们要自己声明,这跟上面的第二种方法的声明是同个道理
函数申明为:
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,
);

 

http://blog.csdn.net/chinazhd/article/details/45060081


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap