RSS
StartseiteKnowledge LibraryTop 10Impressum

Systemweit offline

Den globalen Offline-Status ermitteln und setzen

Zwei Funktionen der WinInet API genügen, um zu ermitteln, ob der globale Offline-Modus aktiviert ist und um diesen auch selbst aktivieren bzw. deaktivieren zu können - ganz wie bei Internet Explorer, Outlook & Co.

FrontPage, Outlook, Outlook Express, der Internet Explorer selbst und andere Programme wissen, wann das System offline geschaltet wurde und können das System auch wieder online schalten. Dieser globale Offline-Modus wurde mit Version 4.0 des Internet Explorer eingeführt und er gilt für alle Programme, die die Windows Internet Funktionen nutzen (WinInet API).

Zum ermitteln des aktuellen Offline-Status dient die WinInet API Funktion InternetQueryOption, wobei die Option INTERNET_OPTION_CONNECTED_STATE die Funktion anweist, Angaben zum Verbindungsstatus in die übergebene Variable lngState zu schreiben:

Private Const INTERNET_OPTION_CONNECTED_STATE = 50

Private Const INTERNET_STATE_DISCONNECTED_BY_USER = &H10

Private Declare Function InternetQueryOption Lib "wininet" Alias _
        "InternetQueryOptionA" (ByVal hInternet As Long, _
        ByVal dwOption As Long, ByRef lpBuffer As Long, _
        ByRef dwBufferLength As Long) As Long

Public Property Get GlobalOffline() As Boolean
  Dim lngRet   As Long
  Dim lngState As Long
  Dim lngSize  As Long
  
  lngSize = Len(lngState)

  lngRet = InternetQueryOption(0, INTERNET_OPTION_CONNECTED_STATE, _
                               lngState, lngSize)
  
  If (lngRet <> 0) Then
    GlobalOffline = (lngState And INTERNET_STATE_DISCONNECTED_BY_USER)
  End If
End Property

Über die API Funktion InternetSetOption lässt sich der globale Offline-Status manipulieren. Die Struktur INTERNET_CONNECTED_INFO enthält dabei Informationen über den zu setzenden Status, der über die Konstanten INTERNET_STATE_DISCONNECTED_BY_USER (offline) oder INTERNET_STATE_CONNECTED (online) angegeben wird. Der optionale Flag ISO_FORCE_DISCONNECTED bewirkt, dass das System auf jeden Fall in den Offline-Modus versetzt wird, egal ob derzeit Downloads oder sonstige WinInet Aktivitäten laufen:

Private Type INTERNET_CONNECTED_INFO
  dwConnectedState  As Long
  dwFlags           As Long
End Type

Private Const ISO_FORCE_DISCONNECTED = &H1
Private Const INTERNET_STATE_CONNECTED = &H1

Private Declare Function InternetSetOption Lib "wininet" Alias _
        "InternetSetOptionA" (ByVal hInternet As Long, _
        ByVal dwOption As Long, ByVal lpBuffer As Long, _
        ByVal dwBufferLength As Long) As Long

Public Property Let GlobalOffline(ByVal New_Value As Boolean)
  Dim tICI   As INTERNET_CONNECTED_INFO
  Dim lngRet As Long
  
  If (New_Value) Then
    tICI.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER
    tICI.dwFlags = ISO_FORCE_DISCONNECTED
  Else
    tICI.dwConnectedState = INTERNET_STATE_CONNECTED
  End If
  
  lngRet = InternetSetOption(0, INTERNET_OPTION_CONNECTED_STATE, _
                           VarPtr(tICI), Len(tICI))
End Property