/*Title:Delphi判斷網絡鏈接
*Author:Insun
*Blog:http://yxmhero1989.blog.163.com
*From:www.4safer.com
/
Delphi判斷網絡鏈接,主要3個方面:判斷是否有網絡連接;判斷網絡連接方式;禁用/啟用 本地網絡連接 。
判斷網絡連接一定要即時的,不要拔了網線還提示有網絡連接。
1。URL.DLL中的InetIsOffline函數。
Delphi中沒有對該函數進行聲明,所以我們要自己聲明,寫在implementation下面OK。 函數申明為:測試這個不即時,老是顯示Connected,已經連接到網絡。
2。Delphi裡面的TcpServer。很郁悶的是也不即時。
示例:
procedure TForm1.FormCreate(Sender: TObject);
begin
try
TcpServer1.Active :=True ;
ShowMessage(網絡已連接)
except
ShowMessage(網絡沒連接);
end;
end;
3。InternetGetConnectedState
在DELPHI中 引用wininet這個單元就可以直接使用 InternetGetConnectedState函數了,下面給出一個判斷當前網絡連接狀態的函數,在注釋中會一一解釋它的一些相關返回值的含義。 網上都是定義為ConnectionKind這個函數,好默契。 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函數 不像某些人說的不即時,倒是很即時,一般都對。
4。IsNetworkAlive
Delphi中沒有對這個函數進行聲明,所以我們要自己聲明,可以在var下,也可在implementation下。
Function IsNetworkAlive(var lpdwFlagsLib:Integer):Integer;stdcall;externalSENSAPI.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<