1. 程式人生 > >用Delphi即時判斷當前的網路的連線方式

用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;  //僅對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, 
);