SABER SE ESTOU NUMA REDE?

TAMANINI 19/04/2004 15:21:56
#21379
Alguém aqui sabe me dizer se tem como saber se estou numa rede interna ou não pelo VB?

USUARIO.EXCLUIDOS 19/04/2004 21:08:43
#21455
Resposta escolhida
'Tente isso, Marcelo:
Option Explicit
Private Enum nRedes
REDE_LW = &H4
REDE_LAN = &H1
REDE_WAN = &H2
End Enum
Private Declare Function IsNetworkAlive Lib "SENSAPI.DLL" (ByRef lpdwFlags As Long) As Long

Public Function TestaRede() As String
Dim nRet As nRedes
Dim sMSG As String
sMSG = Empty
If IsNetworkAlive(nRet) = 0 Then
TestaRede = "Nenhuma rede conectada!"
Else
Select Case nRet
Case Is = REDE_LW: sMSG = "local/remota"
Case Is = REDE_LAN: sMSG = "local"
Case Is = REDE_WAN: sMSG = "remota"
End Select
TestaRede = "Conectado á uma rede " & sMSG & "!"
End If
sMSG = Empty
nRet = Empty
End Function
USUARIO.EXCLUIDOS 20/04/2004 10:29:48
#21518
TAMANINI:
Não necessariamente haverá um acesso á Internet vinculado á existência de uma rede. A rede, sendo local, pode não permitir acesso á Internet. Já sendo remota, as possibilidades de haver um acesso á Internet aumentam, mas não há a obrigatoriedade de que exista.
Explico: No caso da rede local, o servidor pode ou não prover acesso á Internet, distribuindo IPs internos á partir do seu próprio IP na Internet. Mas isso irá depender da configuração da rede, como de haver um compartilhamento da conexão, certo?
No caso das redes remotas, não é necessário que duas máquinas se comuniquem por meio da Internet. Basta que uma "telefone" para a outra! Dessa forma, apesar de o caminho pela Internet estar sendo mais difundido, você também pode não estar conectado á Internet, apesar de ter conexão com uma rede remota.
Para checar se há uma conexão possível com a Internet, você deve utilizar uma outra chamada á API, da biblioteca WinINET, o que requer um Internet Explorer 3 ou superior instalado na máquina. A função é curtinha, sem grandes problemas.
Eu só testei o &H1 até agora, não sei se ela aceita outros valores como parà¢metro,
apesar de haver bastante documentação sobre a biblioteca. é a famosa preguiça...

Mas veja:

Option Explicit
...
Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Long
...
Public Function CanUseInternet(Optional sURL as String) As Boolean
If sURL = Empty Then
sURL = "http://www.microsoft.com/"
End If
CanUseInternet = (InternetCheckConnection(sURL, &H1, 0&) (diferente de) 0)
End Function
...
USUARIO.EXCLUIDOS 20/04/2004 11:17:15
#21538
Teste e dê um retorno. Ambas as chamadas podem ser úteis aos demais colegas.
USUARIO.EXCLUIDOS 20/04/2004 13:24:16
#21615
é meio complicado afirmar isso.
Creio que ambas as funções de checagem (reve e internet) devem estar presentes na aplicação, ao menos como forma de determinar onde pode estar havendo uma quebra de comunicação, se ocorrer.
USUARIO.EXCLUIDOS 21/04/2004 10:45:06
#21740
Eu te passei dois tipos de função, uma para verificar a rede e outra para a conexão com a Internet. Essa última não conseguiu identificar que você tem acesso??
USUARIO.EXCLUIDOS 23/04/2004 11:59:32
#22200
Marcelo, você terá de especificar as funções á serem executadas por prioridade.

No caso, você tendo acesso á Internet, o que é feito pela API de conexão á Internet, não executa a outra função, que verifica a rede.

O que está ocorrendo aí é falha na definição das prioridades.
Tópico encerrado , respostas não são mais permitidas