Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Auto connecting with DUN using InternetAutodial

0.00/5 (No votes)
18 Sep 2003 1  
Quick and dirty hack for automatically bringing DUN dialog if not connected to the internet.

Introduction

After spending approximately 2 hours looking for a way to get Windows XP to automatically dial my ISP when I started a program that needs to be connected to the internet, I gave up and decided to try and write a quick and dirty hack.

For those interested, I've linked to the source above.  It's very small and needs to be linked with WinInet.lib (as well as the "standard" libraries.)  Simply create a Win32 Application and add the code below.

The application, small as it is, is meant to accomplish one or two things. It will:

  • Connect to the internet automatically using the default dial-up network setting
  • Start a program using CreateProcess after a successful connection has been established. This item is optional.


The application starts by calling InternetAutodial passing INTERNET_AUTODIAL_FORCE_UNATTENDED as the first argument. This basically says, "start the default dial-up connection as-is. I don't want to be prompted to do anything." The second argument is a window handle, which in this case is NULL.

If the call to InternetAutodial is successful and an argument was passed to the program, the application attempts to run that argument as an application using CreateProcess. If the application cannot start, a message box appears stating this fact.

Details

There isn't much more to explain code-wise. When using the application, you can either run it with or without a command line. If you want to start an internet-based application that needs an internet connection, the command line to LD needs to contain the name of the application in quotes followed by any command line arguments for the program to start.

For example:

LD "program.exe" program_arguments

The quotes around the program name are necessary if you use a long filename because of the way CreateProcess handles the lpCommandLine parameter (i.e. the second parameter passed to CreateProcess.)

Starting LD by itself simply brings up the default Dial-up Networking dialog if you aren't already connected to the internet.

Once compiled, you can call the application from a shortcut or the command prompt.

NOTE:  There has been an occassion or two where the dialer failed to connect.  The dialup window appeared, but failed to verify the username/password with the ISP.

// LD.cpp : Defines the entry point for the application.

//


#include "stdafx.h" 


#include "windows.h"

#include "wininet.h" 


  

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  BOOL b = InternetAutodial(INTERNET_AUTODIAL_FORCE_UNATTENDED, NULL);

  // not really necessary, but good to know.

  OutputDebugString(b ? "TRUE\n" : "FALSE\n");

  // If a command line was passed to the application, then try and

  // run the application using CreateProcess


  if (*lpCmdLine)
  {
    BOOL success = FALSE;
    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi = {0};

    // As far as I can tell, the STARTUPINFO structure really only needs

    // the cb member filled.  Please correct me if I'm wrong here.


    si.cb = sizeof(si);
    success = CreateProcess(NULL,
                            lpCmdLine,
                            NULL,
                            NULL,
                            FALSE,
                            NORMAL_PRIORITY_CLASS,
                            NULL,
                            NULL,
                            &si,
                            &pi);

    if (FALSE == success)
    {
      MessageBox(NULL, "Couldn't start application", "Error", MB_OK);
    }
  }

 return 0;
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here