五種查詢Internet連線狀態[含IP]的方法 (轉)
五種查詢Inte連線狀態[含IP]的方法
四處收集 + 加工整理 = “原創”,呵呵。姑且不理會這些,大家喜歡就好。
1.Powersock 法:
這種方法最簡單,利用FastNet頁的 Powersock控制元件的LocalIP屬性即可判斷:
if(Powersock1->LocalIP=="127.0.0.1"):線上
else:離線
特點:[1]判斷連線狀態,[2]獲得本地IP。
2.使用URL.DLL的InetIsOffline(0) :
:URL.DLL存放在SYSTEM32;
:URL.DLL存放在SYSTEM;
用GetSystemDirectory(...)得到目錄。
IsOffline(0)返回值:
TRUE: 離線; FALSE:線上。
特點:判斷連線狀態。
3.WinSock法:見
特點:[1]判斷連線狀態;[2]獲得本地IP和主機名。
4.WinInet.DLL的InternetGetConnectedState(&dwFlag,0)函式:
注意:為使用該函式,須在專案中加入:USELIB("WinInet.LIB")
特點:獲得較詳的連線描述!
5.RAS32.DLL的RasEnumConnections函式:
要使用該“列舉所有活動連線”函式,必須:
#include "ras.h"。
若連線數>0:本機當前已連入Internet;
否則: 本機當前未連入Internet;
原始碼如下,在[BCB5 + WIN2K + 撥號上網]下透過(N字頭的為選單項):
-------------Powersock控制元件法-----------------------------------------
void __fastcall TForm1::N11Click(T *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)
{
wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(1,1); Start up WinSock
Wtartup(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_) 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)
{
RANN 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函式失敗!");
}
---------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990344/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 各種免費好用的api,含天氣查詢、IP查詢、物流查詢等API
- 資料庫 - 連線查詢、巢狀查詢、集合查詢資料庫巢狀
- mcafee狀態程式碼含義列表以供查詢
- 網路連線狀態檢視工具:Internet Status for MacMac
- Internet Status Mac網路連線狀態檢視工具Mac
- 在資料庫各種狀態下查詢DBID的五大類十種方法彙總資料庫
- Internet連線共享(轉)
- Mac網路連線狀態檢視工具:Internet Status for MacMac
- IP查詢類API介面查詢,含各精度IP歸屬地查詢介面API
- 常用的系統狀態查詢命令(轉)
- 手機網路連線效能API介面:查詢手機網路連線效能狀態API
- 處理物件的多種狀態及其相互轉換——狀態模式(五)物件模式
- 動態ip代理:保護ip地址,這五種方法請收好
- 連線查詢
- MySQL探祕(五):InnoDB鎖的型別和狀態查詢MySql型別
- oracle狀態查詢(補)Oracle
- oracle常用狀態查詢Oracle
- 查詢網路狀態
- 一種期望線性的靜態區間查詢
- LINUX netstat連線狀態解析及TCP狀態轉換LinuxTCP
- MySQL not in巢狀查詢改寫成外連線方式MySql巢狀
- PostgreSQL - 查詢表名、連線狀況、磁碟佔用SQL
- mysql資料庫連表查詢的幾種方法MySql資料庫
- Oracle LISTENER 中各種狀態資訊的含義Oracle
- SQL連線查詢SQL
- oracle 連線查詢Oracle
- 【Oracle】--連線查詢Oracle
- 使用MFC編寫internet查詢程式 (轉)
- sql 連線查詢例項(left join)三表連線查詢SQL
- 查詢含特定字串的檔案 (轉)字串
- [轉] 連線資料庫查詢手冊資料庫
- HTTP協議狀態碼的含義 (轉)HTTP協議
- 限制單個IP併發TCP連線的方法(轉)TCP
- 查詢圓通快遞並設定物流狀態的方法
- 資料庫資料的查詢----連線查詢資料庫
- 防止代理IP被限制的五種方法
- Oracle的表連線方法(五)Oracle
- SQL連線查詢優化[姊妹篇.第五彈]SQL優化