So for my VSTO project, I need to be able to detect if I am in an online state. This detection will be pivotal in deciding if I should or can retrieve new data from my data providers (these include SharePoint and some other applications). I wanted to be able to key off of Internet Explorer's "Work Offline" feature so that I could easily test my offline state. I wrapped this functionality in a class called ConnectionManager. It really is just a wrapper around the Win32 call to InternetGetConnectedState. This checks to see if there is an internet connection defined and additionally if it is online or not. Here is the class:
Public Class ConnectionManager
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Int32, ByVal dwReserved As Int32) As Boolean
Private Const CONNECT_LAN As Long = &H2 Private Const CONNECT_MODEM As Long = &H1 Private Const CONNECT_PROXY As Long = &H4 Private Const CONNECT_OFFLINE As Long = &H20 Private Const CONNECT_CONFIGURED As Long = &H40 Private Const CONNECT_RAS As Long = &H10
Public Shared Function IsWebConnected(Optional ByRef ConnType As String = "") As Boolean Dim dwflags As Long Dim WebTest As Boolean WebTest = InternetGetConnectedState(dwflags, 0&) Select Case WebTest Case dwflags And CONNECT_LAN : ConnType = "LAN" Case dwflags And CONNECT_MODEM : ConnType = "Modem" Case dwflags And CONNECT_PROXY : ConnType = "Proxy" Case dwflags And CONNECT_OFFLINE : ConnType = "Offline" Case dwflags And CONNECT_CONFIGURED : ConnType = "Configured" Case dwflags And CONNECT_RAS : ConnType = "Remote" End Select Return WebTest End FunctionEnd Class
So in my startup routine in my spreadsheet I can test to see the connectivity state: 'Are we connected and online Dim connType As String = String.Empty Dim isOnline As Boolean = ConnectionManager.IsWebConnected(connType) isOnline = isOnline And connType <> "Offline" 'Load data If (isOnline) Then
Notice that I have to check both that there is a connection and that the return type was not Offline. This seems to be needed since even an offline IE still returns true from the interop call.
Coming Soon:My next writeup will have my task pane structure and a screen shot of what I'm actually building!