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"
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"
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.
My next writeup will have my task pane structure and a screen shot of what I'm actually building!