用Delphi即时判断当前的网络的连接方式
判斷網絡的是否連接或者連接方式,比較重要的一點就是是不是即時判斷,如果你明明無連接,判斷出來卻說你有,連接上了,卻說你還未連接,下面要介紹的兩個方法中 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; //僅對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 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
總結
以上是生活随笔為你收集整理的用Delphi即时判断当前的网络的连接方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BestCoder Round #91
- 下一篇: 网络安全-跨站脚本攻击XSS(Cross