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)