用Delphi即時判斷當前的網路的連線方式
阿新 • • 發佈:2019-02-05
分類: 判斷網路的是否連線或者連線方式,比較重要的一點就是是不是即時判斷,如果你明明無連線,判斷出來卻說你有,連線上了,卻說你還未連線,下面要介紹的兩個方法中 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, );