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 Function
End 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!