15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как определить тип подключения к сети при помощи 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