用Delphi即时判断当前的网络的连接方式
判斷網(wǎng)絡(luò)的是否連接或者連接方式,比較重要的一點(diǎn)就是是不是即時(shí)判斷,如果你明明無連接,判斷出來卻說你有,連接上了,卻說你還未連接,下面要介紹的兩個(gè)方法中 InternetGetConnectedState就是不怎么夠即時(shí)的API函數(shù),而第二個(gè)使用的是IsNetworkAlive這個(gè)API函數(shù),這個(gè)沒有InternetGetConnectedState的那種問題,但是可能需要安裝SDK,也就是.Net框架。
一、InternetGetConnectedState
在DELPHI中 引用wininet這個(gè)單元就可以直接使用 InternetGetConnectedState函數(shù)了,下面給出一個(gè)判斷當(dāng)前網(wǎng)絡(luò)連接狀態(tài)的函數(shù),在注釋中會一一解釋它的一些相關(guān)返回值的含義。
uses wininet; //這個(gè)已經(jīng)說了 必須引用它才可以使用InternetGetConnectedState函數(shù)
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('在線:撥號上網(wǎng)');
if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then showmessage('在線:通過局域網(wǎng)');
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
過程結(jié)束 下面說下各各返回值的意思:
INTERNET_CONNECTION_MODEM: //現(xiàn)在是通過撥號方式上網(wǎng)的
INTERNET_CONNECTION_LAN: //現(xiàn)在是通過局域網(wǎng)上網(wǎng)的
INTERNET_CONNECTION_PROXY: //現(xiàn)在是通過代理上網(wǎng)的
INTERNET_CONNECTION_MODEM_BUSY: //現(xiàn)在MODEM被其他非INTERNET連接占用(離線)
以上就是通過使用InternetGetConnectedState函數(shù)實(shí)現(xiàn)的判斷網(wǎng)絡(luò)狀態(tài)的方法
--------------------------------------------------------------------------------
二、IsNetworkAlive
Delphi中沒有對這個(gè)函數(shù)進(jìn)行聲明,所以我們要自己聲明,請把下面的代碼加入到當(dāng)前窗體或者單元的 聲明全局變量的地方 也就是第一個(gè)var下面。
Function IsNetworkAlive(var lpdwFlagsLib:Integer):Integer;stdcall;external'SENSAPI.DLL';
還有要定義三個(gè)常量:
Const NETWORK_ALIVE_LAN = 1; //通過局域網(wǎng)上網(wǎng)
Const NETWORK_ALIVE_WAN = 2; //通過廣域網(wǎng)上網(wǎng)
Const NETWORK_ALIVE_AOL = 4; //僅對9895有效判斷是否聯(lián)上美國網(wǎng)絡(luò)
下面還是給出一個(gè)過程來判斷當(dāng)前網(wǎng)絡(luò)的狀態(tài),這次是一個(gè)過程
procedure ShowNetWorkState();
var
falg:integer;
Bos:boolean;
begin
Bos:=false;
IsNetworkAlive(falg);
case falg of
NETWORK_ALIVE_LAN:
begin
Showmessage('通過局域網(wǎng)上網(wǎng)。');
Bos:=true;
end;
NETWORK_ALIVE_WAN:
begin
Showmessage('通過廣域網(wǎng)上網(wǎng)。');
Bos:=true;
end;
NETWORK_ALIVE_AOL:
begin
Showmessage('聯(lián)上美國的網(wǎng)絡(luò)。'); //僅對9895有效所以一般不用判斷NETWORK_ALIVE_AOL
Bos:=true;
end;
else Showmessage('沒有聯(lián)網(wǎng)。');
end; //case
if Bos then Showmessage('你現(xiàn)在是聯(lián)網(wǎng)狀態(tài)!')
else Showmessage('你現(xiàn)在是離線狀態(tài)!');
end;
這個(gè)我就不多做解釋了,上面的這兩個(gè)方法是可以用來判斷網(wǎng)絡(luò)連接的方式,也可以用來判斷網(wǎng)絡(luò)是否連通。
--------------------------------------------------------------------------------
下面再介紹一個(gè)方法可以判斷網(wǎng)絡(luò)是否連通的。
三、URL.DLL中的InetIsOffline函數(shù)。
Delphi中沒有對該函數(shù)進(jìn)行聲明,所以我們要自己聲明,這跟上面的第二種方法的聲明是同個(gè)道理
函數(shù)申明為:
function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';
然后就可以調(diào)用函數(shù)判斷系統(tǒng)是否連接到INTERNET
if InetIsOffline(0) then ShowMessage('沒有連接到網(wǎng)絡(luò)')
else ShowMessage('已經(jīng)連接到網(wǎng)絡(luò)');
該函數(shù)返回TRUE說明本地系統(tǒng)沒有連接到INTERNET。
附:
大多數(shù)裝有IE或OFFICE97的系統(tǒng)都有此DLL可供調(diào)用。
InetIsOffline
BOOL InetIsOffline(
DWORD dwFlags,
);
http://blog.csdn.net/chinazhd/article/details/45060081
總結(jié)
以上是生活随笔為你收集整理的用Delphi即时判断当前的网络的连接方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BestCoder Round #91
- 下一篇: 网络安全-跨站脚本攻击XSS(Cross