用API怎么获得连接方式(VPN,ISDN,MODEM)

解决方案 »

  1.   

    '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 函数的调用 
         
    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