Click here to Skip to main content
Licence 
First Posted 18 Sep 2003
Views 62,721
Bookmarked 18 times

Auto connecting with DUN using InternetAutodial

By | 18 Sep 2003 | Article
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

About the Author

Brian Davis

Web Developer

United States United States

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionHow provide Internet service on the remote modem Pinmembercaptainc/c++21:36 26 Jun '08  
Generalnothing happen Pinmemberkkyirui15:39 18 Feb '05  
GeneralC# version Pinmemberrcmetta2:55 5 May '04  
GeneralRe: C# version PinmemberTeh Wee Meng18:41 4 Dec '06  
GeneralUsing, but its not working PinsussGunn218:29 24 Dec '03  
GeneralOne more thing. PinsussGunn218:36 24 Dec '03  
GeneralRe: Using, but its not working Pinmemberrameshchandra20:35 18 May '04  
GeneralRe: Using, but its not working Pinmemberjava_usuario6:08 18 Jan '07  
GeneralSemi Auto Connection to DUN Pinmemberdinesh_ms1:50 20 Sep '03  
Generalgood, but Pinmembergeo_m21:31 18 Sep '03  
GeneralRe: good, but PinmemberBrad Bruce2:03 19 Sep '03  
GeneralRe: good, but Pinmembergeo_m2:13 19 Sep '03  
GeneralRe: good, but PinmemberBrian Davis5:24 19 Sep '03  
GeneralRe: good, but Pinmembergeo_m5:37 19 Sep '03  
GeneralRe: good, but PinmemberBrian Davis9:27 19 Sep '03  
GeneralRe: good, but Pinmembergeo_m21:05 19 Sep '03  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 19 Sep 2003
Article Copyright 2003 by Brian Davis
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid