判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中 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
|
请发表评论