VB技巧问答10000例,是一个教程

源代码在线查看: 如何能够判断网络已经断线.txt

软件大小: 14982 K
上传用户: LIBIN200788
关键词: 10000 问答 教程
下载地址: 免注册下载 普通下载 VIP

相关代码

				我对C++ Builder不太了解,这里给你一个使用VB的解决方案,你可以将它移植到C++中。 
				    'API函数定义 
				    Dim eR As EIGCInternetConnectionState 
				    Dim sMsg As String 
				    Dim sName As String 
				    Dim bConnected As Boolean 
				     
				     
				    Private Declare Function InternetSetDialState Lib "wininet.dll" _ 
				     (ByVal lpszConnectoid As String, ByVal dwState As Long, _ 
				     ByVal dwReserved As Long) As Long 
				     
				     
				    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _ 
				    (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _ 
				    ByVal sProxyBypass As String, ByVal lFlags As Long) As Long 
				     
				     
				    Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" _ 
				     Alias "InternetGetConnectedStateExA" _ 
				     (ByRef lpdwFlags As Long, _ 
				     ByVal lpszConnectionName As String, _ 
				     ByVal dwNameLen As Long, _ 
				     ByVal dwReserved As Long _ 
				     ) As Long 
				    Private Enum EIGCInternetConnectionState 
				     INTERNET_CONNECTION_MODEM = &H1& 
				     INTERNET_CONNECTION_LAN = &H2& 
				     INTERNET_CONNECTION_PROXY = &H4& 
				     INTERNET_RAS_INSTALLED = &H10& 
				     INTERNET_CONNECTION_OFFLINE = &H20& 
				     INTERNET_CONNECTION_CONFIGURED = &H40& 
				    End Enum 
				     
				     
				    'InternetConnected 函数判断是否连接到Internet的函数 
				    '获得是否以及通过何中方式连接到Internet上 
				    Private Function InternetConnected(Optional ByRef eConnectionInfo _ 
				     As EIGCInternetConnectionState, Optional ByRef _ 
				     sConnectionName As String) As Boolean 
				     
				     Dim dwFlags As Long 
				     Dim sNameBuf As String 
				     Dim lR As Long 
				     Dim iPos As Long 
				     
				     sNameBuf = String$(513, 0) 
				     lR = InternetGetConnectedStateEx(dwFlags, sNameBuf, 512, 0&) 
				     eConnectionInfo = dwFlags 
				     iPos = InStr(sNameBuf, vbNullChar) 
				     If iPos > 0 Then 
				     sConnectionName = Left$(sNameBuf, iPos - 1) 
				     ElseIf Not sNameBuf = String$(513, 0) Then 
				     sConnectionName = sNameBuf 
				     End If 
				     InternetConnected = (lR = 1) 
				    End Function 
				     
				     
				    'InternetConnected 函数的调用 
				     
				     '检测是否已经以及使用什么方法连接到Internet 
				     bConnected = InternetConnected(eR, sName) 
				     
				     
				     '根据获得的结果输出 
				     If (eR And INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM Then 
				     sMsg = sMsg & "使用modem连接到Internet." & vbCrLf 
				     End If 
				     If (eR And INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN Then 
				     sMsg = sMsg & "使用内部网连接到Internet." & vbCrLf 
				     End If 
				     If (eR And INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY Then 
				     sMsg = sMsg & "通过代理服务器连接到Internet." & vbCrLf 
				     End If 
				     If (eR And INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE Then 
				     sMsg = sMsg & "现在连接处于离线状态." & vbCrLf 
				     End If 
				     If (eR And INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED Then 
				     sMsg = sMsg & "连接已经被设定." & vbCrLf 
				     Else 
				     sMsg = sMsg & "没有设定好的连接." & vbCrLf 
				     End If 
				     If (eR And INTERNET_RAS_INSTALLED) = INTERNET_RAS_INSTALLED Then 
				     sMsg = sMsg & "本机已经安装了远程访问服务功能." & vbCrLf 
				     End If 
				     
				     '显示连接名称 
				     If bConnected Then 
				     sMsg = "已连接到Internet,连接名称: " & sName & vbCrLf & vbCrLf & sMsg 
				     Else 
				     sMsg = "没有连接到Internet,连接名称: " & sName & vbCrLf & vbCrLf & sMsg 
				     End If 
				
				可以向某个节点发ping 命令。如果没有回来的包,则表明网络已经 不通了。 
				     
				有一个ras的api函数RasEnumConnections可以查出现在系统中所有的连接,返回是0就是没有连接了。 
				    下面是一个例子: 
				    BOOL WINAPI IsModemOnline() 
				    { 
				     RASCONN ras[20]; 
				     DWORD dSize,dNumber,dCount; 
				     
				     ras[0].dwSize = sizeof(RASCONN); 
				     
				     dSize = sizeof( ras ); 
				     
				     if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 ) 
				     if(dNumber>0)return TRUE; 
				     return FALSE; 
				     
				    } 
				    如果返回TRUE就表示有连接。该例子在VC 6.0 pack2 + Win2000 pro通过。 
				     
				用Win32 API 函数: 
				    BOOL InternetGetConnectedState() 
				    VC/BC/BCB 都可用。 
				
				    
				    			

相关资源