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.
#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);
OutputDebugString(b ? "TRUE\n" : "FALSE\n");
if (*lpCmdLine)
{
BOOL success = FALSE;
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
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;
}