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函數: 要使用該“枚舉所有活動連接”函數,必須: #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; 數組所占內存大小; 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函數失敗!"); }
|