Как определить тип подключения к сети
при помощи InternetGetConnectedState
Автор: Paul Marshal
Компилятор: Visual Basic
API функция InternetGetConnectedState содержится в wininet.dll (IE4 /
IE5) и показывает состояние подключения к сети
локальной системы. Она довольно проста в
использовании и возвращает TRUE, если присутствует
соединение с интернетом, иначе FALSE.
Так же функция содержит параметр dwFlags. После
вызова функции, dwFlags содержит состояние текущего
соединения.
Добавьте следующий код в секцию объявлений
модуля BAS:
Option Explicit
Public Declare Function InternetGetConnectedState Lib "wininet" _
(ByRef dwFlags As Long, _
ByVal dwReserved As Long) As Long
'Для соединения с интернетом используется модем.
Public Const INTERNET_CONNECTION_MODEM As Long = &H1
'Для соединения с интернетом используется LAN.
Public Const INTERNET_CONNECTION_LAN As Long = &H2
'Для соединения с интернетом используется прокси сервер.
Public Const INTERNET_CONNECTION_PROXY As Long = &H4
'No longer used.
Public Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8
Public Const INTERNET_RAS_INSTALLED As Long = &H10
Public Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Public Const INTERNET_CONNECTION_CONFIGURED As Long = &H40
'Следующие функции содержат в себе вызов InternetGetConnectedState
Public Function IsNetConnectViaLAN() As Boolean
Dim dwflags As Long
'передаём пустую переменную в функцию, чтобы
'получить состояние флагов, отвечающих за соединение
Call InternetGetConnectedState(dwflags, 0&)
'возвращаем True если флаги указывают на соединение по LAN
IsNetConnectViaLAN = dwflags And INTERNET_CONNECTION_LAN
End Function
Public Function IsNetConnectViaModem() As Boolean
Dim dwflags As Long
'передаём пустую переменную в функцию, чтобы
'получить состояние флагов, отвечающих за соединение
Call InternetGetConnectedState(dwflags, 0&)
'возвращаем True если флаги указывают на соединение по модему
IsNetConnectViaModem = dwflags And INTERNET_CONNECTION_MODEM
End Function
Public Function IsNetConnectViaProxy() As Boolean
Dim dwflags As Long
'передаём пустую переменную в функцию, чтобы
'получить состояние флагов, отвечающих за соединение
Call InternetGetConnectedState(dwflags, 0&)
'возвращаем True если флаги указывают на соединение через проксю
IsNetConnectViaProxy = dwflags And INTERNET_CONNECTION_PROXY
End Function
Public Function IsNetConnectOnline() As Boolean
'здесь не нужно флагов - функция вернёт True если
'присутствует соединие с интернетом любого типа
IsNetConnectOnline = InternetGetConnectedState(0&, 0&)
End Function
Public Function IsNetRASInstalled() As Boolean
Dim dwflags As Long
'передаём пустую переменную в функцию, чтобы
'получить состояние флагов, отвечающих за соединение
Call InternetGetConnectedState(dwflags, 0&)
'возвращаем True если флаги показывают, что RAS установлен
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 & "You have a network connection configured." & vbCrLf
End If
If dwflags And INTERNET_CONNECTION_LAN Then
msg = msg & "The local system connects to the Internet via a LAN"
End If
If dwflags And INTERNET_CONNECTION_PROXY Then
msg = msg & ", and uses a proxy server. "
Else: msg = msg & "."
End If
If dwflags And INTERNET_CONNECTION_MODEM Then
msg = msg & "The local system uses a modem to connect to the Internet. "
End If
If dwflags And INTERNET_CONNECTION_OFFLINE Then
msg = msg & "The connection is currently offline. "
End If
If dwflags And INTERNET_CONNECTION_MODEM_BUSY Then
msg = msg & "The local system's modem is busy with a non-Internet connection. "
End If
If dwflags And INTERNET_RAS_INSTALLED Then
msg = msg & "Remote Access Services are installed on this system."
End If
Else
msg = "Not connected to the internet now."
End If
GetNetConnectString = msg
End Function
Добавьте на форму кнопку (Command1), шесть текстовых
полей (Text1 - Text6). Установите в Text6 свойство Multiline в
True и добавьте следующий код:
Private Sub Command1_Click()
Text1.Text = IsNetConnectViaLAN()
Text2.Text = IsNetConnectViaModem()
Text3.Text = IsNetConnectViaProxy()
Text4.Text = IsNetConnectOnline()
Text5.Text = IsNetRASInstalled()
Text6.Text = GetNetConnectString()
End Sub
|