Descobrindo se o usuário está conectado à Internet com API

À medida em que mais e mais aplicações se tornam distribuídas na Interntet, você pode, sem dúvida, precisar de um meio de saber se o usuário está conectado presentemente à Web ou não. Felizmente, a API do Windows oferece um modo rápido e fácil de fazer isto com a função InternetGetConnectedState().

Esta função usa a sintaxe de declaração abaixo:

Private Declare Function InternetGetConnectedState Lib "wininet" (ByRef dwflags As Long, ByVal dwReserved As Long) As Long

A função retorna 1 se uma conexão existir e zero em caso contrário. Você pode facilmente converter estes valores no seus equivalentes booleanos no VB. Após o teste, o parâmetro dwflags irá indicar que tipo de conexão o usuário tem. Você pode usar comparações de bits para testar por valores específicos. As constantes para dwflags são as seguintes:

Private Const CONNECT_LAN As Long = &H2
Private Const CONNECT_MODEM As Long = &H1
Private Const CONNECT_PROXY As Long = &H4
Private Const CONNECT_RAS As Long = &H10
Private Const CONNECT_OFFLINE As Long = &H20
Private Const CONNECT_CONFIGURED As Long = &H40

Você pode ignorar o parâmetro dwReserved.

Para ver como esta função trabalha, crie um projeto no VB e adicione um botão de comando ao formulário padrão. Insira as declarações das constantes e da função InternetGetConnectedState como mostrado acima. Em seguida insira o código abaixo:


Public Function IsWebConnected(Optional ByRef ConnType As String) As Boolean
    Dim dwflags As Long
    Dim WebTest As Boolean
    ConnType = ""
    WebTest = InternetGetConnectedState(dwflags, 0&)
    Select Case WebTest
        Case dwflags And CONNECT_LAN: ConnType = "LAN"
        Case dwflags And CONNECT_MODEM: ConnType = "Modem"
        Case dwflags And CONNECT_PROXY: ConnType = "Proxy"
        Case dwflags And CONNECT_OFFLINE: ConnType = "Offline"
        Case dwflags And CONNECT_CONFIGURED: ConnType = "Configurada"
        Case dwflags And CONNECT_RAS: ConnType = "Remota"
    End Select
IsWebConnected = WebTest
End Function

Private Sub Command1_Click()
    Dim msg As String
    If IsWebConnected(msg) Then
        msg = "Você está conectado à Internet via: " & msg
    Else
        msg = "Você não está conectado à Internet."
    End If
    MsgBox msg, vbOKOnly, "Estado de conexão à Internet"

End Sub

Quando você rodar o programa e clicar no botão de comando, a mensagem lhe dirá se você está conectado á Internet e por que tipo de conexão.