如果你的机器建有拨号连接,我们一般都是用RasEnumConnections函数进行检测机器是否连在InterNet上,但是如果我目前操作的机器是通过区域网的服务器的InterNet连接共享连在InterNet上的,用什么办法测试到我目前操作的机器是来连接到InterNeet

解决方案 »

  1.   

    Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
    Public Function IsConnected() As Boolean
        If InternetGetConnectedState(0&, 0&) = 1 Then
            IsConnected = True
        Else
            IsConnected = False
        End If
    End Function
      

  2.   

    Attribute VB_Name = "Module1"
    Option Explicit
         Public 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    Public eR As EIGCInternetConnectionState
        Public sMsg As String
        Public sName As String
        Public 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
        
         Public Function InternetConnected(Optional ByRef eConnectionInfo _
         As EIGCInternetConnectionState, Optional ByRef _
         sConnectionName As String) As BooleanVERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   3195
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   3195
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
       Begin VB.CommandButton Command1 
          Caption         =   "Command1"
          Height          =   465
          Left            =   1710
          TabIndex        =   0
          Top             =   1350
          Width           =   1275
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option ExplicitPrivate Sub Command1_Click()
        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
        
         MsgBox sMsg
    End Sub     
         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
      

  3.   

    http://www.freevbcode.com/code/IsConnect3.zip
      

  4.   

    VERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Three ways to check  Internet connection"
       ClientHeight    =   2820
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   5850
       LinkTopic       =   "Form1"
       ScaleHeight     =   2820
       ScaleWidth      =   5850
       StartUpPosition =   3  'Windows Default
       Begin VB.Frame Frame1 
          Caption         =   "Res"
          Height          =   2655
          Left            =   2520
          TabIndex        =   4
          Top             =   0
          Width           =   2895
          Begin VB.TextBox Text1 
             Height          =   2295
             Left            =   120
             MultiLine       =   -1  'True
             ScrollBars      =   2  'Vertical
             TabIndex        =   5
             Top             =   240
             Width           =   2655
          End
       End
       Begin VB.OptionButton Option1 
          Height          =   495
          Index           =   2
          Left            =   240
          TabIndex        =   3
          Top             =   1440
          Width           =   1935
       End
       Begin VB.OptionButton Option1 
          Height          =   615
          Index           =   1
          Left            =   240
          TabIndex        =   2
          Top             =   720
          Width           =   1935
       End
       Begin VB.OptionButton Option1 
          Height          =   495
          Index           =   0
          Left            =   240
          TabIndex        =   1
          Top             =   240
          Value           =   -1  'True
          Width           =   1935
       End
       Begin VB.CommandButton Command1 
          Caption         =   "Check connection"
          Height          =   375
          Left            =   120
          TabIndex        =   0
          Top             =   2280
          Width           =   2175
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    'Working with registry declarations and constants
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
    Private Const ERROR_SUCCESS = 0&
    Private Const APINULL = 0&
    Private Const HKEY_LOCAL_MACHINE = &H80000002
    'Working with wininet.dll declarations and constants
    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 Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long 'this function used with IE4
    'Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long 'this function used with IE4
    Private Const INTERNET_CONNECTION_MODEM = &H1&
    Private Const INTERNET_CONNECTION_LAN = &H2&
    Private Const INTERNET_CONNECTION_PROXY = &H4&
    Private Const INTERNET_RAS_INSTALLED = &H10&
    Private Const INTERNET_CONNECTION_OFFLINE = &H20&
    Private Const INTERNET_CONNECTION_CONFIGURED = &H40&
    'Declares for direct ping
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInet As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As LongPrivate Const INTERNET_OPEN_TYPE_PRECONFIG = 0
    Private Const INTERNET_FLAG_RELOAD = &H80000000
    Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
    Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
    Dim checkType As Integer
    Dim remMsg(2) As StringPrivate Sub Command1_Click()
       Select Case checkType
              Case 0
                   CheckConnection1
              Case 1
                   CheckConnection2
              Case 2
                   CheckConnection3
              Case Else
       End Select
    End Sub
      

  5.   


    Private Sub Form_Load()
       remMsg(0) = "This is the easiest way to check connection. Checking registry value of System\CurrentControlSet\Services\RemoteAccess from HKEY_LOCAL_MACHINE. Using RegOpenKey function from advapi32.dll. Unfortunately, checking is ONLY for MODEM connection. If you are connecting to Internet via Local Area Network (LAN), this method return False even if you are connected"
       remMsg(1) = "This method use InternetGetConnectedStateEx function from wininet.dll. In addition, you can receive some more information about connection - Type of connection (LAN/Modem), Using of Proxy, RAS installing, OnLine/OffLine. It's work fine, but there is one problem. If your computer is in Local Area Network but you are connecting to Internet via modem, this method always returns True, in case you are connecting to Internet or not"
       remMsg(2) = "This method use direct ping to some Internet address (URL) and checking for connection errors. Now it use http:/www.yahoo.com. It's not so quickly, as previous two, but this method is the most reliable"
       Option1(0).Value = True
       Option1(0).Caption = "Using registry"
       Option1(1).Caption = "Using InternetGetConnectedStateEx"
       Option1(2).Caption = "Using direct ping to www.yahoo.com"
       Text1 = remMsg(0)
    End SubPrivate Sub Option1_Click(Index As Integer)
       checkType = Index
       Text1 = remMsg(Index)
    End Sub
    'This part of code is from http://www.VB-world.net with my corrections
    Private Sub CheckConnection1()
    Dim ReturnCode As Long
    Dim hKey As Long
    Dim lpSubKey As String
    Dim phkResult As Long
    Dim lpValueName As String
    Dim lpReserved As Long
    Dim lpType As Long
    Dim lpData As Long
    Dim lpcbData As Long
    lpSubKey = "System\CurrentControlSet\Services\RemoteAccess" & Chr$(0)
    ReturnCode = RegOpenKey(HKEY_LOCAL_MACHINE, lpSubKey, phkResult)
    If ReturnCode = ERROR_SUCCESS Then
       hKey = phkResult
       lpValueName = "Remote Connection"
       lpReserved = APINULL
       lpType = APINULL
       lpData = APINULL
       lpcbData = APINULL
       ReturnCode = RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, ByVal lpData, lpcbData)
       lpcbData = Len(lpData)
       ReturnCode = RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData)
       If ReturnCode = ERROR_SUCCESS Then
           If lpData = 0 Then
              MsgBox "Your computer is not connected to Internet via modem", vbInformation, "Checing connection"
           Else
              MsgBox "Your computer is connected to Internet via modem", vbInformation, "Checing connection"
           End If
       Else
           MsgBox "Your computer is not connected to Internet via modem, but it can be connected via LAN", vbInformation, "Checing connection"
       End If
    End If
    RegCloseKey (hKey)
    End SubPrivate Sub CheckConnection2(Optional ByRef ConnectionInfo As Long, Optional ByRef sConnectionName As String)
    Dim dwFlags As Long
    Dim sNameBuf As String, msg As String
    Dim lPos As Long
    sNameBuf = String$(513, 0)
    If InternetGetConnectedStateEx(dwFlags, sNameBuf, 512, 0&) Then
       lPos = InStr(sNameBuf, vbNullChar)
       If lPos > 0 Then
         sConnectionName = Left$(sNameBuf, lPos - 1)
       Else
         sConnectionName = ""
       End If
       msg = "Your computer is connected to Internet" & vbCrLf & "Connection Name: " & sConnectionName
       If (dwFlags And INTERNET_CONNECTION_LAN) Then
           msg = msg & vbCrLf & "Connection use LAN"
       ElseIf lFlags And INTERNET_CONNECTION_MODEM Then
           msg = msg & vbCrLf & "Connection use modem"
       End If
       If lFlags And INTERNET_CONNECTION_PROXY Then msg = msg & vbCrLf & "Connection use Proxy"
       If lFlags And INTERNET_RAS_INSTALLED Then
          msg = msg & vbCrLf & "RAS INSTALLED"
       Else
          msg = msg & vbCrLf & "RAS NOT INSTALLED"
       End If
       If lFlags And INTERNET_CONNECTION_OFFLINE Then
          msg = msg & vbCrLf & "You are OFFLINE"
       Else
          msg = msg & vbCrLf & "You are ONLINE"
       End If
       If lFlags And INTERNET_CONNECTION_CONFIGURED Then
          msg = msg & vbCrLf & "Your connection is Configured"
       Else
          msg = msg & vbCrLf & "Your connection is not Configured"
       End If
    Else
       msg = "Your computer is NOT connected to Internet"
    End If
       MsgBox msg, vbInformation, "Checking connection"
    End SubPrivate Sub CheckConnection3()
       Dim sTmp As String
       Dim hInet As Long
       Dim hUrl As Long
       Dim Flags As Long
       Dim url As Variant
       hInet = InternetOpen(App.Title, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0&)
       sTmp = Me.Caption
       Me.Caption = "Checking connection with www.yahoo.com..."
       If hInet Then
          Flags = INTERNET_FLAG_KEEP_CONNECTION Or INTERNET_FLAG_NO_CACHE_WRITE Or INTERNET_FLAG_RELOAD
          hUrl = InternetOpenUrl(hInet, "http://www.yahoo.com", vbNullString, 0, Flags, 0)
          If hUrl Then
             MsgBox "Your computer is connected to Internet", vbInformation, "Checing connection"
             Call InternetCloseHandle(hUrl)
          Else
             MsgBox "Your computer is not connected to Internet", vbInformation, "Checing connection"
          End If
       End If
       Call InternetCloseHandle(hInet)
       Me.Caption = sTmp
    End Sub
      

  6.   

    '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
      

  7.   

    lihonggen0(李洪根,用.NET,标准答案来了) 你好!你讲的第二种连接测试方式,好像只是对区域网进行的,并不能证实是否连通了InterNet是不?请给点指导!
      

  8.   

    最简单的方法:
    shell "ping www.sohu.com >c:\1.txt"然后到 c:\ 去读 1.txt 的内容
      

  9.   

    就是注意找个速度快的站点去 ping 一般能解析出站点的 IP 的话,就说明连到外网了,不过不是绝对的