如何得知本機是否能連上Internet? |
答題得分者是:axsoft
|
white
一般會員 發表:18 回覆:7 積分:5 註冊:2003-02-17 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 請問如何得知本機是否能連上Internet? 嘗試過底下這幾種方法都不好. InternetAttemptConnect() 若未上網而有modem時會跳出一個撥號視窗. InternetCheckConnect() 若使用者沒有網路,會造成停滯很久. 不知有什麼方式能快速知道目前能否啟動網路作業(前置判斷),否則一旦啟動若網路有問題會卡半天.直到try{}catch跳出例外才會中斷. 感謝! whitewhite您好: 請試試下面的方法看看是否是您要的! 五種查詢Internet連接狀態[含IP]的方法1.Powersock 元件使用法: 這種方法最簡單,利用FastNet頁的 Powersock控件的LocalIP屬性即可判斷: if(Powersock1->LocalIP=="127.0.0.1"):在線 else:離線 特點:[1]判斷連接狀態,[2]取得本地端IP。 2.使用URL.DLL的InetIsOffline(0) 函數: Win2K:URL.DLL存放在\SYSTEM32\; Win9x:URL.DLL存放在\SYSTEM\; 用GetSystemDirectory(...)得到系統目錄。 InetIsOffline(0)返回值: TRUE: 離線; FALSE:在線。 特點:判斷連接狀態。 3.WinSock: 特點:[1]判斷連線狀態;[2]取得本地端IP和主機名稱。 4.WinInet.DLL的InternetGetConnectedState(&dwFlag,0)函數: 注意:為使用該函數,須在項目文件中加入:USELIB("WinInet.LIB") 特點:取得較詳細的連線資訊! 5.RASAPI32.DLL的RasEnumConnections函數: 要使用該「RasEnumConnections」函數,必須: #include "ras.h"。 若連線數目>0:本機目前已連入Internet; 否則: 本機目前未連入Internet;程式碼如下,在[BCB5 WIN2K 撥接上網]下通過(N字頭的為選單): -------------Powersock元件使用方法----------------------------------------- void __fastcall TForm1::N11Click(TObject *Sender) { if(Powersock1->LocalIP=="127.0.0.1") ShowMessage("未連線:" Powersock1->LocalIP); else ShowMessage("已連線:" Powersock1->LocalIP); }-------------URL.DLL的InetIsOffline函數---------------------------- HINSTANCE hDLL; typedef bool __stdcall(*FUN)(int); 定義DLL函數指標FUN FUN isOffLine; void __fastcall TForm1::N21Click(TObject *Sender) { char Buffer[MAX_PATH]; GetSystemDirectory(Buffer,MAX_PATH); hDLL=LoadLibrary((AnsiString(Buffer) "\\URL.DLL").c_str()); if(hDLL==NULL){ ShowMessage("Cannot load URL.DLL! Return... "); return; } isOffLine=(FUN)GetProcAddress(hDLL,"InetIsOffline"); if(isOffLine==NULL){ ShowMessage("Cannot load InetIsOffline(int), Return..."); return; } if(!isOffLine(0)) ShowMessage("已連線"); else ShowMessage("未連線"); FreeLibrary(hDLL); }------------WinSock方法------------------------------------------------ void __fastcall TForm1::N31Click(TObject *Sender) { WORD wVersionRequested; WSADATA wsaData; wVersionRequested=MAKEWORD(1,1); Start up WinSock WSAStartup(wVersionRequested,&wsaData); ----------------------------------------- hostent *p; char *p2; char s[128]; gethostname(s,128); Get the computer name p=gethostbyname(s); p2=inet_ntoa(*((in_addr *)p->h_addr)); Get the IpAddress ----------------------------------------- AnsiString LocationIP=p2; if(LocationIP=="127.0.0.1") ShowMessage("未連線:" LocationIP); else ShowMessage("已連線:" LocationIP); WSACleanup(); }-----------WinInet.DLL的InternetGetConnectedState函數---------------- void __fastcall TForm1::N41Click(TObject *Sender) { StaticText1->Caption=""; StaticText2->Caption=""; StaticText3->Caption=""; StaticText4->Caption=""; StaticText5->Caption=""; StaticText6->Caption=""; StaticText7->Caption=""; DWORD dwFlag; InternetGetConnectedState(&dwFlag,0); if(dwFlag & INTERNET_CONNECTION_MODEM) StaticText1->Caption="Yes"; //MODEM連線 else StaticText1->Caption="No"; if(dwFlag & INTERNET_CONNECTION_LAN) StaticText2->Caption="Yes"; //LAN連線 else StaticText2->Caption="No"; if(dwFlag & INTERNET_CONNECTION_PROXY) StaticText3->Caption="Yes"; //代理伺服器連線 else StaticText3->Caption="No"; ---------檢查是否已連線------------------------------------------- if(InternetGetConnectedState(NULL,0)) StaticText4->Caption="Yes"; //連線中 else StaticText4->Caption="No"; if(dwFlag & INTERNET_CONNECTION_OFFLINE) StaticText5->Caption="Yes"; //離線中 else StaticText5->Caption="No"; ---------------------------------------------------------------- if(dwFlag & INTERNET_RAS_INSTALLED) StaticText6->Caption="Yes"; else StaticText6->Caption="No"; if(dwFlag & INTERNET_CONNECTION_CONFIGURED) StaticText7->Caption="Yes"; else StaticText7->Caption="No"; }----------RASAPI32.DLL的RasEnumConnections函數--------------------------- #include "ras.h" void __fastcall TForm1::N51Click(TObject *Sender) { RASCONN RASconn[256]; //已連線數目 DWORD BuffSize; //連線數目的Buffer大小; DWORD ConnNum; //已連線數目 RASconn[0].dwSize=sizeof(RASCONN); BuffSize=sizeof(RASCONN)*256; DWORD dwReturn=RasEnumConnections(RASconn,&BuffSize,&ConnNum); if(dwReturn==0) { if(ConnNum>0) ShowMessage("已連線。目前已啟動的連線數量:" AnsiString(ConnNum)); else ShowMessage("未連線。目前已啟動的連線數量:" AnsiString(ConnNum)); } else ShowMessage("RasEnumConnections函數失敗!"); } ---------------------------------------------------------------------------網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/03/21 09:06:12 |
Egn
一般會員 發表:29 回覆:54 積分:16 註冊:2005-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |