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
Download
- modGlobalOffline Modul und Beispielprojekt (globaloffline.zip - 3KB)