两个问题一起问了,要不多了,所以请大家务必回答清楚,先谢谢了1.用VB如何判断用户是通用拨号上网还是通过局域网上网的?2.用户拨号上网后又如何断开网络连接?请各位大哥,大姐帮忙!!

解决方案 »

  1.   

    问题1:直接判断本机IP,如果是拨号上网,得到的是外部IP,局域网上网的话还是内网的IP.
    问题2:不知道
      

  2.   

    但是有些企业用户可以自行分配IP,如:
    IP Address. . . . . . . . . . . . : 10.6.2.75
    Subnet Mask . . . . . . . . . . . : 255.255.254.0
    Default Gateway . . . . . . . . . : 10.6.2.1
    这样的IP:10.6.2.75并不是192.168.*开头的,所以还是不好判断是否是内网,还是外网的IP
      

  3.   

    一般来的,直接上网的Default Gateway和IP是相同的.
    通过LAN上网的,都是不相同的.
    感觉上但这方法可取.第二个问题,不会
      

  4.   

    Option Explicit
    '拨号/断网
    Private Declare Function InternetDial Lib "wininet.dll" (ByVal hwndParent As Long, ByVal lpszConnectoid As String, ByVal dwFlags As Long, lpdwConnection As Long, ByVal dwReserved As Long) As Long
    Private Declare Function InternetHangUp Lib "wininet.dll" (ByVal dwConnection As Long, ByVal dwReserved As Long) As Long
    Private Declare Function InternetAutodial Lib "wininet.dll" (ByVal dwFlags As Long, ByVal dwReserved As Long) As Long
    Private Declare Function InternetAutodialHangup Lib "wininet.dll" (ByVal dwReserved As Long) As Long
    Private Const INTERNET_DIALSTATE_DISCONNECTED = 1
    Private Const INTERNET_AUTODIAL_FORCE_ONLINE = 1
    Private Const INTERNET_AUTODIAL_FORCE_UNATTENDED = 2
    Private Const INTERNET_DIAL_UNATTENDED = &H8000
    Private Handle 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 Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef dwFlags As Long, ByVal dwReserved As Long) As Long
    Private Const INTERNET_CONNECTION_MODEM As Long = &H1      '本系统使用调制解调器与因特网相连
    Private Const INTERNET_CONNECTION_LAN As Long = &H2        '本系统通过LAN与因特网相连
    Private Const INTERNET_CONNECTION_PROXY As Long = &H4      '本系统使用proxy代理服务器与因特网相连
    Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8 '未使用
    Private Const INTERNET_RAS_INSTALLED As Long = &H10
    Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20
    Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40'枚举网络连接
    Private Const RAS_MaxDeviceType = 16
    Private Const RAS95_MaxDeviceName = 128
    Private Const RAS95_MaxEntryName = 256
    Private Type RASCONN95
        dwSize As Long
        hRasConn As Long
        szEntryName(RAS95_MaxEntryName) As Byte
        szDeviceType(RAS_MaxDeviceType) As Byte
        szDeviceName(RAS95_MaxDeviceName) As Byte
    End Type
    Private Type RASENTRYNAME95
        dwSize As Long
        szEntryName(RAS95_MaxEntryName) As Byte
    End Type
    Private Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (lprasconn As Any, lpcb As Long, lpcConnections As Long) As Long
    Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long
    Private Declare Function RasHangUp Lib "rasapi32.dll" Alias "RasHangUpA" (ByVal hRasConn As Long) As Long'拨号
    Public Function DialUp(LinkName As String) As Boolean
        InternetDial 0, LinkName, INTERNET_AUTODIAL_FORCE_UNATTENDED, Handle, 0
        DialUp = (Handle <> 0)
    End Function
    '断网
    Public Sub HangUp()
        If Handle <> 0 Then
            InternetHangUp Handle, 0
            Handle = 0
        End If
    End Sub
    '枚举网络连接
    Public Sub EnumConnectName(Value() As String)
        Dim s As Long, l As Long, ln As Long, a As String
        ReDim r(255) As RASENTRYNAME95    r(0).dwSize = 264
        s = 256 * r(0).dwSize
        l = RasEnumEntries(vbNullString, vbNullString, r(0), s, ln)
        ReDim Value(ln - 1)
        For l = 0 To ln - 1
            a = StrConv(r(l).szEntryName(), vbUnicode)
            Value(l) = Left$(a$, InStr(a$, Chr$(0)) - 1)
        Next
    End Sub'判断是否在线
    Public Function Online() As Boolean
        Online = InternetGetConnectedState(0&, 0&)
    End Function
    '判断是否在线并返回连接方式
    Public Property Get OnlineOfLinkName(LinkName As String) As Boolean
        LinkName = Space$(128)
        OnlineOfLinkName = InternetGetConnectedStateEx(0, LinkName, 128, 0&)
    End Property'如果是通过LAN的连接,则返回True
    Public Function IsNetConnectViaLAN() As Boolean
        Dim dwFlags As Long
        Call InternetGetConnectedState(dwFlags, 0&)
        IsNetConnectViaLAN = dwFlags And INTERNET_CONNECTION_LAN
    End Function
    '如果是通过调制解调器的连接,则返回True
    Public Function IsNetConnectViaModem() As Boolean
        Dim dwFlags As Long
        Call InternetGetConnectedState(dwFlags, 0&)
        IsNetConnectViaModem = dwFlags And INTERNET_CONNECTION_MODEM
    End Function
    '如果是通过Proxy代理服务器的连接,则返回True
    Public Function IsNetConnectViaProxy() As Boolean
        Dim dwFlags As Long
        Call InternetGetConnectedState(dwFlags, 0&)
        IsNetConnectViaProxy = dwFlags And INTERNET_CONNECTION_PROXY
    End Function
    '如果已安装了RAS,则返回True
    Public Function IsNetRASInstalled() As Boolean
        Dim dwFlags As Long
        Call InternetGetConnectedState(dwFlags, 0&)
        IsNetRASInstalled = dwFlags And INTERNET_RAS_INSTALLED
    End Function
    '返回当前网络状态信息字符串
    Public Function GetNetConnectString() As String
        Dim dwFlags As Long
        Dim msg As String
        If InternetGetConnectedState(dwFlags, 0&) Then
            If dwFlags And INTERNET_CONNECTION_CONFIGURED Then
                msg = msg & "系统配置了网络连接" & vbCrLf
            End If
            If dwFlags And INTERNET_CONNECTION_LAN Then
                msg = msg & "系统通过局域网与因特网相连接"
            End If
            If dwFlags And INTERNET_CONNECTION_PROXY Then
                msg = msg & "并使用了Proxy代理服务"
            Else: msg = msg & "."
            End If
            If dwFlags And INTERNET_CONNECTION_MODEM Then
                msg = msg & "系统使用调制解调器与因特网相连接"
            End If
            If dwFlags And INTERNET_CONNECTION_OFFLINE Then
                msg = msg & "系统当前处于离线状态"
            End If
            If dwFlags And INTERNET_CONNECTION_MODEM_BUSY Then
                msg = msg & "系统的调制解调器未连接到因特网"
            End If
            If dwFlags And INTERNET_RAS_INSTALLED Then
                msg = msg & "本系统安装了远程访问服务"
            End If
        Else
            msg = "当前未与因特网相连"
        End If
        GetNetConnectString = msg
    End Function
      

  5.   

    判断网络连接方式
    来源:http://www.china-askpro.com/msg32/qa75.shtml    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     
         
    Private 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
      

  6.   

    第二个问题,网络连接断开http://www.vbaspnew.com/ziyuan/w/wl/106.txt
      

  7.   

    第二个问题:Modem拨号:
    发送:strOutput = "ATDT" + telPhone number + vbCr  (文本发送)
    挂断:2B 2B 2B (字节发送) 接收到“OK”再发送:"ATH" & vbCr  (文本发送)