304 lines
9.4 KiB
C++
304 lines
9.4 KiB
C++
|
//*********************************************************************
|
||
|
//* Microsoft Windows **
|
||
|
//* Copyright(c) Microsoft Corp., 1994 **
|
||
|
//*********************************************************************
|
||
|
|
||
|
//
|
||
|
// MANUAL.CPP - Functions for manual options page
|
||
|
//
|
||
|
|
||
|
// HISTORY:
|
||
|
//
|
||
|
// 05/13/98 jeremys Created.
|
||
|
//
|
||
|
//*********************************************************************
|
||
|
|
||
|
#include "pre.h"
|
||
|
#include "icwextsn.h"
|
||
|
#include "icwacct.h"
|
||
|
|
||
|
extern UINT GetDlgIDFromIndex(UINT uPageIndex);
|
||
|
extern BOOL g_bManualPath;
|
||
|
extern BOOL g_bLanPath;
|
||
|
|
||
|
const TCHAR c_szICWMan[] = TEXT("INETWIZ.EXE");
|
||
|
const TCHAR c_szRegValICWCompleted[] = TEXT("Completed");
|
||
|
|
||
|
// Run the manual wizard
|
||
|
BOOL RunICWManProcess
|
||
|
(
|
||
|
void
|
||
|
)
|
||
|
{
|
||
|
STARTUPINFO si;
|
||
|
PROCESS_INFORMATION pi;
|
||
|
MSG msg ;
|
||
|
DWORD iWaitResult = 0;
|
||
|
BOOL bRetVal = FALSE;
|
||
|
|
||
|
memset(&pi, 0, sizeof(pi));
|
||
|
memset(&si, 0, sizeof(si));
|
||
|
if(CreateProcess(c_szICWMan,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
TRUE,
|
||
|
0,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
&si,
|
||
|
&pi))
|
||
|
{
|
||
|
// wait for event or msgs. Dispatch msgs. Exit when event is signalled.
|
||
|
while((iWaitResult=MsgWaitForMultipleObjects(1, &pi.hProcess, FALSE, INFINITE, QS_ALLINPUT))==(WAIT_OBJECT_0 + 1))
|
||
|
{
|
||
|
// read all of the messages in this next loop
|
||
|
// removing each message as we read it
|
||
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||
|
{
|
||
|
// how to handle quit message?
|
||
|
if (msg.message == WM_QUIT)
|
||
|
{
|
||
|
goto done;
|
||
|
}
|
||
|
else
|
||
|
DispatchMessage(&msg);
|
||
|
}
|
||
|
}
|
||
|
done:
|
||
|
CloseHandle(pi.hThread);
|
||
|
CloseHandle(pi.hProcess);
|
||
|
}
|
||
|
|
||
|
// See if ICWMAN completed, by checking the SmartStart Completed RegKey
|
||
|
HKEY hkey;
|
||
|
if ( RegOpenKeyEx(HKEY_CURRENT_USER,
|
||
|
ICWSETTINGSPATH,
|
||
|
0,
|
||
|
KEY_ALL_ACCESS,
|
||
|
&hkey) == ERROR_SUCCESS)
|
||
|
{
|
||
|
DWORD dwType = REG_BINARY;
|
||
|
DWORD dwValue = 0;
|
||
|
DWORD cbValue = sizeof(DWORD);
|
||
|
RegQueryValueEx(hkey,
|
||
|
c_szRegValICWCompleted,
|
||
|
NULL,
|
||
|
&dwType,
|
||
|
(LPBYTE) &dwValue,
|
||
|
&cbValue);
|
||
|
|
||
|
RegCloseKey(hkey);
|
||
|
|
||
|
bRetVal = dwValue;
|
||
|
}
|
||
|
|
||
|
return(bRetVal);
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ManualOptionsInitProc
|
||
|
|
||
|
SYNOPSIS: Called when page is displayed
|
||
|
|
||
|
ENTRY: hDlg - dialog window
|
||
|
fFirstInit - TRUE if this is the first time the dialog
|
||
|
is initialized, FALSE if this InitProc has been called
|
||
|
before (e.g. went past this page and backed up)
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL CALLBACK ManualOptionsInitProc
|
||
|
(
|
||
|
HWND hDlg,
|
||
|
BOOL fFirstInit,
|
||
|
UINT *puNextPage
|
||
|
)
|
||
|
{
|
||
|
if (fFirstInit)
|
||
|
{
|
||
|
// If we are in modeless operation, then we need to
|
||
|
// quit the wizard, and launch INETWIZ.EXE
|
||
|
if (gpWizardState->cmnStateData.bOEMCustom)
|
||
|
{
|
||
|
ShowWindow(gpWizardState->cmnStateData.hWndApp,SW_HIDE);
|
||
|
if (RunICWManProcess())
|
||
|
{
|
||
|
// Set the welcome state
|
||
|
UpdateWelcomeRegSetting(TRUE);
|
||
|
|
||
|
// Restore the desktop
|
||
|
UndoDesktopChanges(g_hInstance);
|
||
|
}
|
||
|
|
||
|
gfQuitWizard = TRUE; // Quit the wizard
|
||
|
return FALSE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//BUGBUG -- SHOULD BE AUTO?
|
||
|
// initialize radio buttons
|
||
|
CheckDlgButton(hDlg,IDC_MANUAL_MODEM, BST_CHECKED);
|
||
|
TCHAR* pszManualIntro = new TCHAR[MAX_MESSAGE_LEN * 3];
|
||
|
if (pszManualIntro)
|
||
|
{
|
||
|
TCHAR szTemp[MAX_MESSAGE_LEN];
|
||
|
|
||
|
LoadString(g_hInstance, IDS_MANUAL_INTRO1, pszManualIntro, MAX_MESSAGE_LEN * 3);
|
||
|
LoadString(g_hInstance, IDS_MANUAL_INTRO2, szTemp, ARRAYSIZE(szTemp));
|
||
|
lstrcat(pszManualIntro, szTemp);
|
||
|
SetWindowText(GetDlgItem(hDlg, IDC_MANUAL_INTRO), pszManualIntro);
|
||
|
delete pszManualIntro;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// If we are run from the Runonce with the smartreboot option, we need to
|
||
|
// jump to the Manual wiz immediately because that was where we left the user
|
||
|
// last time.
|
||
|
|
||
|
if (g_bManualPath || g_bLanPath)
|
||
|
{
|
||
|
Button_SetCheck(GetDlgItem(hDlg, IDC_MANUAL_MODEM), g_bManualPath);
|
||
|
Button_SetCheck(GetDlgItem(hDlg, IDC_MANUAL_LAN), !g_bManualPath);
|
||
|
|
||
|
if (LoadInetCfgUI( hDlg,
|
||
|
IDD_PAGE_MANUALOPTIONS,
|
||
|
IDD_PAGE_END,
|
||
|
IsDlgButtonChecked(hDlg, IDC_MANUAL_LAN) ? WIZ_HOST_ICW_LAN : WIZ_HOST_ICW_MPHONE))
|
||
|
{
|
||
|
if( DialogIDAlreadyInUse( g_uICWCONNUIFirst) )
|
||
|
{
|
||
|
// we're about to jump into the external apprentice, and we don't want
|
||
|
// this page to show up in our history list
|
||
|
*puNextPage = g_uICWCONNUIFirst;
|
||
|
|
||
|
g_bAllowCancel = TRUE;
|
||
|
if (gpINETCFGApprentice)
|
||
|
gpINETCFGApprentice->SetStateDataFromExeToDll( &gpWizardState->cmnStateData);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
g_bManualPath = FALSE;
|
||
|
g_bLanPath = FALSE;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// if we've travelled through external apprentice pages,
|
||
|
// it's easy for our current page pointer to get munged,
|
||
|
// so reset it here for sanity's sake.
|
||
|
gpWizardState->uCurrentPage = ORD_PAGE_MANUALOPTIONS;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ManualOptionsCmdProc
|
||
|
|
||
|
SYNOPSIS: Called when a command is generated from page
|
||
|
|
||
|
ENTRY: hDlg - dialog window
|
||
|
wParam - wParam
|
||
|
lParam - lParam
|
||
|
|
||
|
EXIT: returns TRUE
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL CALLBACK ManualOptionsCmdProc
|
||
|
(
|
||
|
HWND hDlg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
)
|
||
|
{
|
||
|
switch (GET_WM_COMMAND_CMD(wParam, lParam))
|
||
|
{
|
||
|
case BN_DBLCLK:
|
||
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
||
|
{
|
||
|
case IDC_MANUAL_MODEM:
|
||
|
case IDC_MANUAL_LAN:
|
||
|
{
|
||
|
// somebody double-clicked a radio button
|
||
|
// auto-advance to the next page
|
||
|
PropSheet_PressButton(GetParent(hDlg), PSBTN_NEXT);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ManualOptionsOKProc
|
||
|
|
||
|
SYNOPSIS: Called when Next or Back btns pressed from page
|
||
|
|
||
|
ENTRY: hDlg - dialog window
|
||
|
fForward - TRUE if 'Next' was pressed, FALSE if 'Back'
|
||
|
puNextPage - if 'Next' was pressed,
|
||
|
proc can fill this in with next page to go to. This
|
||
|
parameter is ingored if 'Back' was pressed.
|
||
|
pfKeepHistory - page will not be kept in history if
|
||
|
proc fills this in with FALSE.
|
||
|
|
||
|
EXIT: returns TRUE to allow page to be turned, FALSE
|
||
|
to keep the same page.
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL CALLBACK ManualOptionsOKProc
|
||
|
(
|
||
|
HWND hDlg,
|
||
|
BOOL fForward,
|
||
|
UINT *puNextPage,
|
||
|
BOOL *pfKeepHistory
|
||
|
)
|
||
|
{
|
||
|
ASSERT(puNextPage);
|
||
|
BOOL bRet = TRUE;
|
||
|
|
||
|
if (fForward)
|
||
|
{
|
||
|
if( IsDlgButtonChecked(hDlg, IDC_MANUAL_MODEM) )
|
||
|
{
|
||
|
gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_SMARTREBOOT_MANUAL;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_SMARTREBOOT_LAN;
|
||
|
}
|
||
|
|
||
|
bRet = FALSE;
|
||
|
// read radio button state
|
||
|
*pfKeepHistory = FALSE;
|
||
|
if (LoadInetCfgUI( hDlg,
|
||
|
IDD_PAGE_MANUALOPTIONS,
|
||
|
IDD_PAGE_END,
|
||
|
IsDlgButtonChecked(hDlg, IDC_MANUAL_LAN) ? WIZ_HOST_ICW_LAN : WIZ_HOST_ICW_MPHONE))
|
||
|
{
|
||
|
if( DialogIDAlreadyInUse( g_uICWCONNUIFirst) )
|
||
|
{
|
||
|
// we're about to jump into the external apprentice, and we don't want
|
||
|
// this page to show up in our history list
|
||
|
bRet = TRUE;
|
||
|
*puNextPage = g_uICWCONNUIFirst;
|
||
|
g_bAllowCancel = TRUE;
|
||
|
if (gpINETCFGApprentice)
|
||
|
gpINETCFGApprentice->SetStateDataFromExeToDll( &gpWizardState->cmnStateData);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return bRet;
|
||
|
}
|
||
|
|