Reference C# Dial Up Program

You can use this code, and these import statements and enums do detect a connection, fire up the Dialup box, and then hangup when you're done. If you don't want the user to select the dialup connection then user InternetAutodial/InternetAutodialHangup pair rather. But Please note that this pair will ONLY use whatever dialup is set as the default.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//BEGIN
InternetConnectionState flags = 0;
int nConnection = 0;
bool bInternet = InternetGetConnectedState(ref flags,0);
if (bInternet == false)
{
  //Not Connected
  if (flags == 0)
  {
    //Do something to tell the user to install some internet connection
  }
  int nResult = InternetDial(IntPtr.Zero,"",(int)InternetDialFlags.INTERNET_DIAL_FORCE_PROMPT , ref nConnection , 0);
  switch(nResult)
  {
    case 87://Bad Parameter for InternetDial - Couldn't Connect";
      break;
    case 668://No Connection for InternetDial - Couldn't Connect";
      break;
    case 631://User Cancelled Dialup
      break;
    default://Unknown InternetDial Error
      break;
    case 0://Connection Succeeded
      break;
  }
  //Do whatever you need to do on the internet (send mail etc)
  InternetHangup(nConnection,0);
  //DONE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[DllImport("wininet.dll",CharSet=CharSet.Auto)]
static extern bool InternetGetConnectedState(ref InternetConnectionState lpdwFlags, int dwReserved);
[Flags]
enum InternetConnectionState: int
{
    INTERNET_CONNECTION_MODEM = 0x1,
    INTERNET_CONNECTION_LAN = 0x2,
    INTERNET_CONNECTION_PROXY = 0x4,
    INTERNET_RAS_INSTALLED = 0x10,
    INTERNET_CONNECTION_OFFLINE = 0x20,
    INTERNET_CONNECTION_CONFIGURED = 0x40
}
[DllImport("wininet.dll",CharSet=CharSet.Auto)]
static extern int InternetDial(IntPtr hwndParent,[MarshalAs(UnmanagedType.LPStr)] string strConnection,[MarshalAs(UnmanagedType.U4)]int dwFlags,ref int dwConnection,int dwReserved);
[Flags]
enum InternetDialFlags: int
{
    INTERNET_DIAL_FORCE_PROMPT    =0x2000,
    INTERNET_DIAL_SHOW_OFFLINE    =0x4000,
    INTERNET_DIAL_UNATTENDED      =0x8000
}
[DllImport("wininet.dll",CharSet=CharSet.Auto)]
static extern int InternetHangup([MarshalAs(UnmanagedType.U4)] int nConnection,[MarshalAs(UnmanagedType.U4)]int dwReserved);