#include "precomp.h" #include // for html help calls #include #include "wizard.rcv" // for VER_PRODUCTVERSION_STR only #include "adjustui.h" #include "ieaklite.h" #include "ie4comp.h" CCabMappings g_cmCabMappings; REVIEWINFO g_rvInfo; // a structure containing the review information HWND g_hWizard; TCHAR g_szCustIns[MAX_PATH] = TEXT(""); TCHAR g_szSrcRoot[MAX_PATH] = TEXT(""); //Batch mode only: use settings in g_szSrcRoot to build package in g_szBuildRoot. TCHAR g_szBuildRoot[MAX_PATH] = TEXT(""); TCHAR g_szBuildTemp[MAX_PATH] = TEXT(""); TCHAR g_szWizPath[MAX_PATH]; TCHAR g_szWizRoot[MAX_PATH]; TCHAR g_szTitle[MAX_PATH]; TCHAR g_szLogFile[MAX_PATH] = TEXT(""); HANDLE g_hLogFile = NULL; //Logfile handle; extern TCHAR g_szDefInf[]; extern TCHAR g_szTempSign[]; BOOL g_fDownload = TRUE; BOOL g_fCD = FALSE; BOOL g_fLAN = FALSE; BOOL g_fBrandingOnly = FALSE; BOOL g_fBranded = FALSE; BOOL g_fIntranet = FALSE; BOOL g_fMailNews95 = FALSE; BOOL g_fLangInit = FALSE; BOOL g_fSrcDirChanged = TRUE; static BOOL s_fDestDirChanged = TRUE; BOOL g_fDisableIMAPPage = FALSE; extern TCHAR g_szDeskTemp[]; extern int g_iInstallOpt; extern TCHAR g_szInstallFolder[]; extern TCHAR s_szBannerText[MAX_PATH]; HANDLE g_hThread = NULL; // handle to DownloadSiteThreadProc extern HANDLE g_hAVSThread; extern BOOL g_fOptCompInit; BOOL g_fCancelled = FALSE; BOOL g_fDone = FALSE; BOOL g_fKeyGood = FALSE; static BOOL s_fNT5; int g_iKeyType = KEY_TYPE_STANDARD; TCHAR g_szKey[16] ; extern int MakeKey(TCHAR *, int); PROPSHEETPAGE g_psp[NUM_PAGES]; static HPROPSHEETPAGE s_ahPsp[NUM_PAGES]; static BOOL s_fPageEnabled[NUM_PAGES] = { TRUE, TRUE, TRUE, TRUE }; int g_iCurPage; RECT g_dtRect; TCHAR g_szLanguage[16]; extern TCHAR g_szActLang[]; TCHAR g_aszLang[NUMLANG][16]; DWORD g_aLangId[NUMLANG]; BOOL g_fDemo = FALSE; #define MAX_STDOPT 5 #define MIN_CUSTOPT 6 #define MAX_CUSTOPT 7 #define OPT_CUST1 6 #define OPT_CUST2 7 extern BOOL CheckKey(LPTSTR szKey); static HKEY s_hkIEAKUser; BOOL g_fUseIEWelcomePage = FALSE; static TCHAR s_szSourceDir[MAX_PATH] = TEXT(""); TCHAR g_szLoadedIns[MAX_PATH] = TEXT(""); static BOOL s_fLoadIns; static BOOL s_fAppendLang; BOOL g_fBatch = FALSE; BOOL g_fBatch2 = FALSE; //The second batch mode static TCHAR s_szType[16]; int s_iType; extern BOOL g_fServerICW; extern BOOL g_fServerKiosk; extern BOOL g_fServerless; extern BOOL g_fNoSignup; extern BOOL g_fSkipServerIsps; extern BOOL g_fSkipIspIns; extern HANDLE g_hDownloadEvent; int g_iDownloadState = 0, g_nLangs = 0; HWND g_hDlg = 0; extern void IE4BatchSetup(void); extern BOOL InitList(HWND hwnd, UINT id); extern BOOL g_fSilent, g_fStealth; extern BOOL g_fUrlsInit; extern BOOL g_fLocalMode; extern BOOL g_fInteg, g_fImportConnect; extern PCOMPONENT g_paComp; extern UINT g_uiNumCabs; extern PCOMP_VERSION g_rgCompVer; extern HFONT g_hFont; DWORD g_dwPlatformId = PLATFORM_WIN32; // new cif format stuff CCifFile_t *g_lpCifFileNew = NULL; CCifRWFile_t *g_lpCifRWFile = NULL; CCifRWFile_t *g_lpCifRWFileDest = NULL; CCifRWFile_t *g_lpCifRWFileVer = NULL; // g_hBaseDllHandle is used by DelayLoadFailureHook() -- defined in ieakutil.lib // for more info, read the Notes section in ieak5\ieakutil\dload.cpp HANDLE g_hBaseDllHandle; //OCW specific BOOL g_fOCW = FALSE; BOOL g_fOCWCancel = FALSE; TCHAR g_szParentWindowName[MAX_PATH]; BOOL ParseCmdLine(LPSTR lpCmdLine); void PositionWindow(HWND hWnd); // extern TCHAR g_szIEAKProg[MAX_PATH]; void GetIEAKDir(LPTSTR szDir); extern HBITMAP g_hBannerBmp; extern HWND g_hWait; extern LPTSTR GetOutputPlatformDir(); void GenerateCustomIns(); extern void WriteMSTrustKey(BOOL bSet); DWORD g_wCurLang; static HWND s_hWndHelp = NULL; void CleanUp() { if (g_hAVSThread != NULL) { while ((MsgWaitForMultipleObjects(1, &g_hAVSThread, FALSE, INFINITE, QS_ALLINPUT)) != WAIT_OBJECT_0) { MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } CloseHandle(g_hAVSThread); } if (g_hThread != NULL) { while ((MsgWaitForMultipleObjects(1, &g_hThread, FALSE, INFINITE, QS_ALLINPUT)) != WAIT_OBJECT_0) { MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } CloseHandle(g_hThread); } if (g_paComp != NULL) { for (PCOMPONENT pComp = g_paComp; ISNONNULL(pComp->szSection); pComp++) { if (pComp->pszAVSDupeSections != NULL) CoTaskMemFree(pComp->pszAVSDupeSections); } LocalFree(g_paComp); } if (g_rgCompVer) { LocalFree(g_rgCompVer); } if (g_hFont != NULL) DeleteObject(g_hFont); if (g_lpCifRWFile != NULL) { delete g_lpCifRWFile; g_lpCifRWFile = NULL; } if (g_lpCifFileNew != NULL) { delete g_lpCifFileNew; g_lpCifFileNew = NULL; } if (g_lpCifRWFileDest != NULL) { delete g_lpCifRWFileDest; g_lpCifRWFileDest = NULL; } if (g_lpCifRWFileVer != NULL) { delete g_lpCifRWFileVer; g_lpCifRWFileVer = NULL; } if (g_hBannerBmp != NULL) DeleteObject(g_hBannerBmp); if (ISNONNULL(g_szDeskTemp)) PathRemovePath(g_szDeskTemp); } int _stdcall ModuleEntry(void) { int i; STARTUPINFOA si; LPSTR pszCmdLine = GetCommandLineA(); if ( *pszCmdLine == '\"' ) { /* * Scan, and skip over, subsequent characters until * another double-quote or a null is encountered. */ while ( *++pszCmdLine && (*pszCmdLine != '\"') ) ; /* * If we stopped on a double-quote (usual case), skip * over it. */ if ( *pszCmdLine == '\"' ) pszCmdLine++; } else { while (*pszCmdLine > ' ') pszCmdLine++; } /* * Skip past any white space preceeding the second token. */ while (*pszCmdLine && (*pszCmdLine <= ' ')) { pszCmdLine++; } si.dwFlags = 0; GetStartupInfoA(&si); i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine, si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT); ExitProcess(i); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int) { MSG msg; HANDLE hMutex; HRESULT hrOle; int iRetVal; // initialize g_hBaseDllHandle which is used by DelayLoadFailureHook() // in ieak5\ieakutil\dload.cpp g_hBaseDllHandle = hInstance; hMutex = NULL; // allow only one instance running at a time, except for build lab batch mode // also if ie6 is not installed, bail out if (lpCmdLine == NULL || *lpCmdLine == '\0' || StrCmpNIA(lpCmdLine, "/o", 2) == 0 || StrCmpNIA(lpCmdLine, "/p", 2) == 0) { DWORD dwIEVer; hMutex = CreateMutex(NULL, TRUE, TEXT("IEAK6Wizard.Mutex")); if (hMutex != NULL && GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hMutex); ErrorMessageBox(NULL, IDS_ERROR_MULTWIZ); return ERROR_CANCELLED; } dwIEVer = GetIEVersion(); if (HIWORD(dwIEVer) < 6) { ErrorMessageBox(NULL, IDS_NOIE); return ERROR_CANCELLED; } } ZeroMemory(&g_rvInfo, sizeof(g_rvInfo)); g_rvInfo.hinstExe = hInstance; g_rvInfo.hInst = LoadLibrary(TEXT("ieakui.dll")); if (g_rvInfo.hInst == NULL) return ERROR_CANCELLED; // if the class registration fails, return. if (!InitApplication(hInstance)) { FreeLibrary(g_rvInfo.hInst); return ERROR_CANCELLED; } SHCreateKeyHKCU(RK_IEAK_SERVER_MAIN, KEY_ALL_ACCESS, &s_hkIEAKUser); g_wCurLang = GetUserDefaultLCID() & 0xFFFF; s_fNT5 = IsOS(OS_NT5); hrOle = CoInitialize(NULL); GetIEAKDir(g_szWizPath); StrCpy(g_szWizRoot, g_szWizPath); CharUpper(g_szWizRoot); LoadString(g_rvInfo.hInst, IDS_TITLE, g_szTitle, countof(g_szTitle)); //get the mode -- NOTE: THIS MUST COME BEFORE PARSECMDLINE SO THAT COMMANDLINE OPTIONS OVERRIDE THE REG ENTRY!!! DWORD dwSize = sizeof(DWORD); if (SHGetValue(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\IEAK"), TEXT("Mode"), NULL, &s_iType, &dwSize) != ERROR_SUCCESS) s_iType = INTRANET; //if there is no reg entry, default to corp mode switch (s_iType) { case REDIST://icp StrCpy(s_szType, TEXT("REDIST")); g_fBranded = FALSE; g_iKeyType = KEY_TYPE_SUPER; g_fIntranet = g_fSilent = FALSE; break; case BRANDED://isp StrCpy(s_szType, TEXT("BRANDED")); g_fBranded = TRUE; g_iKeyType = KEY_TYPE_SUPER; g_fIntranet = g_fSilent = FALSE; break; case INTRANET: default: StrCpy(s_szType, TEXT("INTRANET")); g_iKeyType = KEY_TYPE_SUPERCORP; g_fBranded = TRUE; g_fIntranet = TRUE; break; } *g_szKey = TEXT('\0'); if (lpCmdLine != NULL && *lpCmdLine) if (!ParseCmdLine(lpCmdLine)) { FreeLibrary(g_rvInfo.hInst); return ERROR_CANCELLED; } if (*g_szLogFile != 0 && (g_hLogFile = CreateFile(g_szLogFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == NULL) { MessageBox(NULL, TEXT("Cannot open log file"), NULL, MB_OK); return ERROR_CANCELLED; } // Perform initializations that apply to a specific instance if (!InitInstance(hInstance)) { FreeLibrary(g_rvInfo.hInst); return ERROR_CANCELLED; } // Acquire and dispatch messages until a WM_QUIT message is received. iRetVal = GetMessage(&msg, NULL, 0, 0); while (iRetVal != -1 && iRetVal != 0) { TranslateMessage(&msg); DispatchMessage(&msg); iRetVal = GetMessage(&msg, NULL, 0, 0); } CleanUp(); if (S_OK == hrOle) CoUninitialize(); if (g_hLogFile) CloseHandle(g_hLogFile); #ifdef DBG if (g_fBatch || g_fBatch2 || MessageBox(NULL, TEXT("OK to Delete Temp Files"), TEXT("Wizard Complete"), MB_YESNO) == IDYES) #endif if (lstrlen(g_szBuildTemp)) PathRemovePath(g_szBuildTemp); RegCloseKey(s_hkIEAKUser); WriteMSTrustKey(FALSE); // Mark MS as a trusted provider if (s_hWndHelp != NULL) SendMessage(s_hWndHelp, WM_CLOSE, 0, 0L); FreeLibrary(g_rvInfo.hInst); if (hMutex != NULL) CloseHandle(hMutex); if (g_fOCWCancel) return ERROR_CANCELLED; return (int) msg.wParam; } BOOL InitApplication(HINSTANCE hInstance) { WNDCLASS wcSample; wcSample.style = 0; wcSample.lpfnWndProc = MainWndProc; wcSample.cbClsExtra = 0; wcSample.cbWndExtra = 0; wcSample.hInstance = hInstance; wcSample.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIZARD)); wcSample.hCursor = LoadCursor(NULL, IDC_ARROW); wcSample.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH); wcSample.lpszMenuName = NULL; wcSample.lpszClassName = TEXT("SampleWClass"); return RegisterClass(&wcSample); } BOOL ParseCmdLine(LPSTR lpCmdLine) { TCHAR szCmdLine[MAX_PATH]; LPTSTR pParam; TCHAR szWrkLang[8] = TEXT("en"); HKEY hKey; DWORD dwSize; TCHAR szType[16]; //Mode: CORP(INTRANET), ICP(RETAIL) or ISP(BRANDED) *szType = TEXT('\0'); A2Tbux(lpCmdLine, szCmdLine); CharUpper(szCmdLine); pParam = szCmdLine; while (pParam != NULL) { pParam = StrChr(pParam, TEXT('/')); if (pParam == NULL) break; switch (*++pParam) { case TEXT('S'): // srcpath if ( *(pParam+2) == '\"' ) { pParam++; //skip the first quote, we don't want the quotes StrCpyN(g_szSrcRoot, pParam + 2, countof(g_szSrcRoot)); StrTok(g_szSrcRoot, TEXT("\"\n\r\t")); //instead of stopping w/ a space, stop w/ " } else { StrCpyN(g_szSrcRoot, pParam + 2, countof(g_szSrcRoot)); StrTok(g_szSrcRoot, TEXT(" \n\r\t")); } pParam += StrLen(g_szSrcRoot); break; case TEXT('I'): case TEXT('D'): if ( *(pParam+2) == '\"' ) { pParam++; //skip the first quote, we don't want the quotes StrCpyN(g_szBuildRoot, pParam + 2, countof(g_szBuildRoot)); StrTok(g_szBuildRoot, TEXT("\"\n\r\t")); //instead of stopping w/ a space, stop w/ " } else { StrCpyN(g_szBuildRoot, pParam + 2, countof(g_szBuildRoot)); StrTok(g_szBuildRoot, TEXT(" \n\r\t")); } pParam += StrLen(g_szBuildRoot); break; case TEXT('K'): StrCpyN(g_szKey, pParam + 2, countof(g_szKey)); StrTok(g_szKey, TEXT(" \n\r\t")); pParam += StrLen(g_szKey); break; case TEXT('M'): // Mode: corp, isp or icp StrCpyN(szType, pParam + 2, countof(szType)); StrTok(szType, TEXT(" \n\r\t")); pParam += StrLen(szType); break; case TEXT('Q'): // logfile if ( *(pParam+2) == '\"' ) { pParam++; //skip the first quote, we don't want the quotes StrCpyN(g_szLogFile, pParam + 2, countof(g_szLogFile)); StrTok(g_szLogFile, TEXT("\"\n\r\t")); //instead of stopping w/ a space, stop w/ " } else { StrCpyN(g_szLogFile, pParam + 2, countof(g_szLogFile)); StrTok(g_szLogFile, TEXT(" \n\r\t")); } pParam += StrLen(g_szLogFile); break; case TEXT('L'): StrCpyN(szWrkLang, pParam + 2, 3); pParam += 3; break; case TEXT('O'): g_fOCW = TRUE; g_dwPlatformId = PLATFORM_WIN32; // (a-saship) read all the data from the registry from HKCU\Software\Microsoft\IEAK since // office reads/writes data from/to this location. This is due to the fact that IEAK5_5 // changed the registry location to HKCU\Software\Microsoft\IEAK5_5 and office is not aware // of it. These values is only used by Office and hence we are safe here. if (RegOpenKeyEx(HKEY_CURRENT_USER, RK_IEAK, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { dwSize = sizeof(g_szKey); SHQueryValueEx(hKey, TEXT("KeyCode"), NULL, NULL, (LPVOID) g_szKey, &dwSize); dwSize = sizeof(g_szIEAKProg); SHQueryValueEx(hKey, TEXT("SourceDir"), NULL, NULL, (LPVOID) g_szIEAKProg, &dwSize); if (*g_szIEAKProg) { PathAddBackslash(g_szIEAKProg); StrCpy(s_szSourceDir, g_szIEAKProg); } dwSize = sizeof(g_szBuildRoot); SHQueryValueEx(hKey, TEXT("TargetDir"), NULL, NULL, (LPVOID) g_szBuildRoot, &dwSize); if (*g_szBuildRoot == TEXT('\0')) StrCpy(g_szBuildRoot, g_szIEAKProg); if (*g_szBuildRoot) PathRemoveBackslash(g_szBuildRoot); s_fAppendLang = TRUE; dwSize = sizeof(g_szParentWindowName); SHQueryValueEx(hKey, TEXT("ParentWindowName"), NULL, NULL, (LPVOID) g_szParentWindowName, &dwSize); RegCloseKey(hKey); } break; } } *g_szLanguage = TEXT('\\'); StrCpy(&g_szLanguage[1], szWrkLang); g_szLanguage[3] = TEXT('\\'); g_szLanguage[4] = TEXT('\0'); StrCpy(g_szActLang, szWrkLang); if ((*g_szKey != TEXT('\0')) && (!szType[0])) //if they set a key, we should override the mode { CheckKey(g_szKey); if (g_iKeyType == KEY_TYPE_SUPERCORP) { StrCpy(s_szType, TEXT("INTRANET")); StrCpy(szType, TEXT("CORP")); } else StrCpy(szType, TEXT("ICP")); } /* removed--this is really crappy validation code and also makes it impossible to have spaces in paths if (StrCmpN(g_szBuildRoot, TEXT("\\\\"), 2) && StrCmpN(&g_szBuildRoot[1], TEXT(":\\"), 2)) { ErrorMessageBox(NULL, IDS_NEEDPATH); return FALSE; } */ if (StrLen(g_szBuildRoot) <= 3) { ErrorMessageBox(NULL, IDS_ROOTILLEGAL); return FALSE; } if ((!PathIsDirectory(g_szBuildRoot)) && (!CreateDirectory(g_szBuildRoot,NULL))) { TCHAR szMsg[MAX_PATH]; TCHAR szTemp[2 * MAX_PATH]; LoadString(g_rvInfo.hInst, IDS_BADDIR, szMsg, countof(szMsg)); wnsprintf(szTemp, countof(szTemp), szMsg, g_szBuildRoot); MessageBox(NULL, szTemp, g_szTitle, MB_OK | MB_SETFOREGROUND | MB_ICONEXCLAMATION); return FALSE; } GetTempPath(MAX_PATH, g_szBuildTemp); PathAppend(g_szBuildTemp, TEXT("iedktemp")); PathRemovePath(g_szBuildTemp); PathCreatePath(g_szBuildTemp); GenerateCustomIns(); if (g_szSrcRoot[0]) g_fBatch2 = TRUE; else g_fBatch = TRUE; if (szType[0]) { if ( 0 == StrCmpI(szType, TEXT("CORP"))) { // if type CORP, set CorpMode=1; this allows the Profile Manager to run DWORD dwVal = 1; RegSetValueEx(s_hkIEAKUser, TEXT("CorpMode"), 0, REG_DWORD, (CONST BYTE *) &dwVal, sizeof(dwVal)); s_iType = INTRANET; } else if ( 0 == StrCmpI(szType, TEXT("ISP"))) { RegDeleteValue(s_hkIEAKUser, TEXT("CorpMode")); s_iType = BRANDED; } else if ( 0 == StrCmpI(szType, TEXT("ICP"))) { RegDeleteValue(s_hkIEAKUser, TEXT("CorpMode")); s_iType = REDIST; } else { if(g_hLogFile) { TCHAR szError[MAX_PATH]; DWORD dwNumWritten; LoadString(g_rvInfo.hInst,IDS_ERROR_INVALIDMODE,szError,MAX_PATH); FormatString(szError,szType); WriteFile(g_hLogFile,szError,StrLen(szError),&dwNumWritten,NULL); } return FALSE; } } else s_iType = GetPrivateProfileInt( IS_BRANDING, TEXT("Type"), REDIST, g_szCustIns ); switch (s_iType) { case REDIST: g_fBranded = g_fIntranet = g_fSilent = FALSE; break; case BRANDED: case BRANDEDPROXY: g_fBranded = TRUE; g_fIntranet = g_fSilent = FALSE; break; case INTRANET: g_fIntranet = g_fBranded = TRUE; break; } if (g_fOCW) { // set to corp mode g_fIntranet = g_fBranded = TRUE; s_iType = INTRANET; // set to flat install g_fDownload = g_fCD = g_fBrandingOnly = FALSE; g_fLAN = TRUE; return TRUE; } IE4BatchSetup(); return TRUE; } // // // FUNCTION: InitInstance(HANDLE) // // PURPOSE: Creates the main window. // // COMMENTS: N/A // // HWND g_hWndCent; BOOL InitInstance(HINSTANCE hInstance) { InitCommonControls(); GetWindowRect(GetDesktopWindow(), &g_dtRect); g_hWndCent = CreateWindow( TEXT("SampleWClass"), TEXT("IEAK"), WS_POPUPWINDOW | WS_CAPTION, g_dtRect.right/2, g_dtRect.bottom/2, 0, 0, HWND_DESKTOP, NULL, hInstance, (HINSTANCE) NULL); ShowWindow(g_hWndCent, SW_SHOWNORMAL); UpdateWindow(g_hWndCent); PostMessage(g_hWndCent, WM_COMMAND, IDM_WIZARD, (LPARAM) 0); return (TRUE); } IEAKLITEINFO g_IEAKLiteArray[NUM_GROUPS] = { {IDS_IL_ACTIVESETUP, IDS_IL_ACTIVESETUPDESC, IDS_IL_ACTIVESETUPDESC, IDS_IL_ACTIVESETUPDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_CORPINSTALL, IDS_IL_CORPINSTALLDESC, IDS_IL_CORPINSTALLDESC, IDS_IL_CORPINSTALLDESC, -2, FALSE, FALSE, TRUE, TRUE}, {IDS_IL_CABSIGN, IDS_IL_CABSIGNDESC, IDS_IL_CABSIGNDESC, IDS_IL_CABSIGNDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_ICM, IDS_IL_ICMDESC, IDS_IL_ICMDESC, IDS_IL_ICMDESC, -2, FALSE, TRUE, TRUE, TRUE}, {IDS_IL_BROWSER, IDS_IL_BROWSERDESC, IDS_IL_BROWSERDESC, IDS_IL_BROWSERDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_URL, IDS_IL_URLDESC, IDS_IL_URLDESC, IDS_IL_URLDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_FAV, IDS_IL_FAVDESC, IDS_IL_FAVDESC, IDS_IL_FAVDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_UASTR, IDS_IL_UASTRDESC, IDS_IL_UASTRDESC, IDS_IL_UASTRDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_CONNECT, IDS_IL_CONNECTDESC, IDS_IL_CONNECTDESC, IDS_IL_CONNECTDESC, -2, FALSE, TRUE, TRUE, TRUE}, {IDS_IL_SIGNUP, IDS_IL_SIGNUPDESC, IDS_IL_SIGNUPDESC, IDS_IL_SIGNUPDESC, -2, FALSE, TRUE, FALSE, TRUE}, {IDS_IL_CERT, IDS_IL_CERTDESC, IDS_IL_CERTDESC, IDS_IL_CERTDESC, -2, FALSE, TRUE, TRUE, TRUE}, {IDS_IL_ZONES, IDS_IL_ZONESDESC, IDS_IL_ZONESDESC, IDS_IL_ZONESDESC, -2, FALSE, FALSE, TRUE, TRUE}, {IDS_IL_PROGRAMS, IDS_IL_PROGRAMSDESC, IDS_IL_PROGRAMSDESC, IDS_IL_PROGRAMSDESC, -2, TRUE, TRUE, TRUE, TRUE}, {IDS_IL_MAILNEWS, IDS_IL_MAILNEWSDESC, IDS_IL_MAILNEWSDESC, IDS_IL_MAILNEWSDESC, -2, FALSE, TRUE, TRUE, TRUE}, {IDS_IL_ADM, IDS_IL_ADMDESC, IDS_IL_ADMDESC, IDS_IL_ADMDESC, -2, TRUE, TRUE, TRUE, TRUE} }; void DisableIEAKLiteGroups() { TCHAR szIspFile[MAX_PATH]; if (!g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled) { s_fPageEnabled[PPAGE_SETUPWIZARD] = s_fPageEnabled[PPAGE_COMPSEL] = s_fPageEnabled[PPAGE_ISKBACK] = s_fPageEnabled[PPAGE_CDINFO] = s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = s_fPageEnabled[PPAGE_COPYCOMP] = s_fPageEnabled[PPAGE_COMPURLS] = s_fPageEnabled[PPAGE_CUSTCOMP] = FALSE; } if (!g_IEAKLiteArray[IL_CORPINSTALL].fEnabled) { s_fPageEnabled[PPAGE_CORPCUSTOM] = s_fPageEnabled[PPAGE_INSTALLDIR] = s_fPageEnabled[PPAGE_SILENTINSTALL] = FALSE; } if (!g_IEAKLiteArray[IL_CABSIGN].fEnabled) { s_fPageEnabled[PPAGE_CABSIGN] = FALSE; } if (!g_IEAKLiteArray[IL_ICM].fEnabled) { s_fPageEnabled[PPAGE_ICM] = FALSE; } if (!g_IEAKLiteArray[IL_BROWSER].fEnabled) { s_fPageEnabled[PPAGE_TITLE] = s_fPageEnabled[PPAGE_CUSTICON] = s_fPageEnabled[PPAGE_BTOOLBARS] = FALSE; } if (!g_IEAKLiteArray[IL_URL].fEnabled) { s_fPageEnabled[PPAGE_STARTSEARCH] = s_fPageEnabled[PPAGE_WELCOMEMSGS] = s_fPageEnabled[PPAGE_ADDON] = FALSE; } if (!g_IEAKLiteArray[IL_FAV].fEnabled) { s_fPageEnabled[PPAGE_FAVORITES] = FALSE; } if (!g_IEAKLiteArray[IL_UASTR].fEnabled) { s_fPageEnabled[PPAGE_UASTRDLG] = FALSE; } if (!g_IEAKLiteArray[IL_CONNECT].fEnabled) { s_fPageEnabled[PPAGE_PROXY] = s_fPageEnabled[PPAGE_CONNECTSET] = s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] = FALSE; } if (!g_IEAKLiteArray[IL_SIGNUP].fEnabled) { s_fPageEnabled[PPAGE_QUERYSIGNUP] = s_fPageEnabled[PPAGE_SIGNUPFILES] = s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_ICW] = s_fPageEnabled[PPAGE_ISPINS] = FALSE; } if (!g_IEAKLiteArray[IL_CERT].fEnabled) { s_fPageEnabled[PPAGE_ADDROOT] = s_fPageEnabled[PPAGE_SECURITYCERT] = FALSE; } if (!g_IEAKLiteArray[IL_ZONES].fEnabled) { s_fPageEnabled[PPAGE_SECURITY] = FALSE; } if (!g_IEAKLiteArray[IL_PROGRAMS].fEnabled) { s_fPageEnabled[PPAGE_PROGRAMS] = FALSE; } if (!g_IEAKLiteArray[IL_MAILNEWS].fEnabled) { s_fPageEnabled[PPAGE_MAIL] = s_fPageEnabled[PPAGE_IMAP] = s_fPageEnabled[PPAGE_LDAP] = s_fPageEnabled[PPAGE_OE] = s_fPageEnabled[PPAGE_SIG] = s_fPageEnabled[PPAGE_PRECONFIG] = s_fPageEnabled[PPAGE_OEVIEW] = FALSE; } if (!g_IEAKLiteArray[IL_ADM].fEnabled) { s_fPageEnabled[PPAGE_ADMDESC] = FALSE; s_fPageEnabled[PPAGE_ADM] = FALSE; } // do not show stage 4 page if nothing has been left on in the stage if (!(g_IEAKLiteArray[IL_BROWSER].fEnabled || g_IEAKLiteArray[IL_URL].fEnabled || g_IEAKLiteArray[IL_FAV].fEnabled || g_IEAKLiteArray[IL_UASTR].fEnabled || (g_IEAKLiteArray[IL_CONNECT].fEnabled && g_fBranded) || (g_IEAKLiteArray[IL_SIGNUP].fEnabled && !g_fIntranet && g_fBranded) || ((g_IEAKLiteArray[IL_CERT].fEnabled || g_IEAKLiteArray[IL_ZONES].fEnabled) && g_fIntranet))) s_fPageEnabled[PPAGE_STAGE4] = FALSE; if (!(g_IEAKLiteArray[IL_PROGRAMS].fEnabled || (g_IEAKLiteArray[IL_MAILNEWS].fEnabled && g_fBranded) || g_IEAKLiteArray[IL_ADM].fEnabled)) s_fPageEnabled[PPAGE_STAGE5] = FALSE; // szIspFile used as temp buf if (g_fDownload && !g_fOCW && ISNONNULL(g_szCustIns) && !GetPrivateProfileString(IS_ACTIVESETUP_SITES, TEXT("SiteUrl0"), TEXT(""), szIspFile, countof(szIspFile), g_szCustIns)) s_fPageEnabled[PPAGE_COMPURLS] = TRUE; // do not show stage 3 page if nothing has been left on in the stage if (!(s_fPageEnabled[PPAGE_COMPURLS] || g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled || (g_IEAKLiteArray[IL_CORPINSTALL].fEnabled && g_fIntranet) || g_IEAKLiteArray[IL_CABSIGN].fEnabled || (g_IEAKLiteArray[IL_ICM].fEnabled) && g_fBranded && !g_fBrandingOnly)) s_fPageEnabled[PPAGE_STAGE3] = FALSE; // always enable download urls page for download packages // the page itself has logic to skip if (g_fDownload) s_fPageEnabled[PPAGE_COMPURLS] = TRUE; } void EnablePages() { int i; static BOOL s_fRunningOnIntegShell = WhichPlatform() & PLATFORM_INTEGRATED; for (i = 0; i < NUM_PAGES; i++) { s_fPageEnabled[i] = TRUE; } // NOTE: pages should not explicitly be set to TRUE after this point // g_fIntranet and g_fBranded are set to the following values depending on the role // ICP: (g_fIntranet == FALSE && g_fBranded == FALSE) // ISP: (g_fIntranet == FALSE && g_fBranded == TRUE ) // CORP: (g_fIntranet == TRUE && g_fBranded == TRUE ) // // So, check for // ICP is (!g_fBranded) // ISP is (!g_fIntranet && g_fBranded) // CORP is (g_fIntranet) if (!g_fBranded) { // ICP mode s_fPageEnabled[PPAGE_PROXY] = s_fPageEnabled[PPAGE_INSTALLDIR] = s_fPageEnabled[PPAGE_ICM] = s_fPageEnabled[PPAGE_ICW] = s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] = s_fPageEnabled[PPAGE_MAIL] = s_fPageEnabled[PPAGE_IMAP] = s_fPageEnabled[PPAGE_LDAP] = s_fPageEnabled[PPAGE_PRECONFIG] = s_fPageEnabled[PPAGE_OEVIEW] = s_fPageEnabled[PPAGE_OE] = s_fPageEnabled[PPAGE_CORPCUSTOM] = s_fPageEnabled[PPAGE_ADMDESC] = s_fPageEnabled[PPAGE_SIG] = s_fPageEnabled[PPAGE_FOLDERMCCP] = s_fPageEnabled[PPAGE_ADDROOT] = s_fPageEnabled[PPAGE_SECURITY] = s_fPageEnabled[PPAGE_SECURITYCERT] = s_fPageEnabled[PPAGE_QUERYSIGNUP] = s_fPageEnabled[PPAGE_SILENTINSTALL] = s_fPageEnabled[PPAGE_DESKTOP] = s_fPageEnabled[PPAGE_DTOOLBARS] = s_fPageEnabled[PPAGE_CONNECTSET] = s_fPageEnabled[PPAGE_SIGNUPFILES] = s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_ISPINS] = FALSE; } else if (!g_fIntranet) { // Either ISP or Super ISP s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] = s_fPageEnabled[PPAGE_SIG] = s_fPageEnabled[PPAGE_INSTALLDIR] = s_fPageEnabled[PPAGE_SILENTINSTALL] = s_fPageEnabled[PPAGE_DESKTOP] = s_fPageEnabled[PPAGE_DTOOLBARS] = s_fPageEnabled[PPAGE_ADMDESC] = s_fPageEnabled[PPAGE_SECURITY] = s_fPageEnabled[PPAGE_SECURITYCERT] = s_fPageEnabled[PPAGE_FOLDERMCCP] = s_fPageEnabled[PPAGE_CORPCUSTOM] = FALSE; s_fPageEnabled[PPAGE_SERVERISPS] = (g_fServerICW || g_fServerKiosk) && !g_fSkipServerIsps; s_fPageEnabled[PPAGE_ISPINS] = !g_fNoSignup && !g_fSkipIspIns; s_fPageEnabled[PPAGE_ICW] = g_fServerICW; s_fPageEnabled[PPAGE_SIGNUPFILES] = !g_fNoSignup; } else { // CorpAdmin mode s_fPageEnabled[PPAGE_ADDROOT] = s_fPageEnabled[PPAGE_ICW] = s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_ISPINS] = s_fPageEnabled[PPAGE_QUERYSIGNUP] = s_fPageEnabled[PPAGE_SIGNUPFILES] = FALSE; s_fPageEnabled[PPAGE_DTOOLBARS] = s_fPageEnabled[PPAGE_DESKTOP] = g_fInteg && s_fRunningOnIntegShell && !s_fNT5; s_fPageEnabled[PPAGE_FOLDERMCCP] = g_fInteg && !s_fNT5; s_fPageEnabled[PPAGE_ADMDESC] = ADMEnablePage(); } if (!g_fCD) s_fPageEnabled[PPAGE_ISKBACK] = s_fPageEnabled[PPAGE_CDINFO] = FALSE; if (!g_fDownload) s_fPageEnabled[PPAGE_COMPURLS] = FALSE; if (!g_fMailNews95 && !g_fOCW) { s_fPageEnabled[PPAGE_MAIL] = s_fPageEnabled[PPAGE_IMAP] = s_fPageEnabled[PPAGE_PRECONFIG] = s_fPageEnabled[PPAGE_OEVIEW] = s_fPageEnabled[PPAGE_LDAP] = s_fPageEnabled[PPAGE_OE] = s_fPageEnabled[PPAGE_SIG] = FALSE; } if (!g_fDownload && (g_fSilent || g_fStealth)) s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = FALSE; // pages to disable for single disk branding only builds if (g_fBrandingOnly && !(g_fDownload || g_fLAN || g_fCD)) { s_fPageEnabled[PPAGE_CUSTCOMP] = s_fPageEnabled[PPAGE_COMPSEL] = s_fPageEnabled[PPAGE_COMPURLS] = s_fPageEnabled[PPAGE_INSTALLDIR] = s_fPageEnabled[PPAGE_CORPCUSTOM] = s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = s_fPageEnabled[PPAGE_COPYCOMP] = s_fPageEnabled[PPAGE_ICM] = s_fPageEnabled[PPAGE_ADDON] = FALSE; g_fInteg = TRUE; // set this flag to true so admins can still make desktop customizations } // disable advanced installation options page if no download media and custom mode // disabled if (!g_fDownload && InsGetBool(IS_BRANDING, TEXT("HideCustom"), FALSE, g_szCustIns)) s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = FALSE; if (g_fImportConnect) s_fPageEnabled[PPAGE_PROXY] = s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] = FALSE; s_fPageEnabled[PPAGE_ADM] = ADMEnablePage(); if(g_fOCW) { s_fPageEnabled[PPAGE_FINISH] = s_fPageEnabled[PPAGE_MEDIA] = s_fPageEnabled[PPAGE_ISPINS] = s_fPageEnabled[PPAGE_ICM] = s_fPageEnabled[PPAGE_QUERYSIGNUP] = s_fPageEnabled[PPAGE_ICW] = s_fPageEnabled[PPAGE_SIGNUPFILES] = s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_SETUPWIZARD] = s_fPageEnabled[PPAGE_STAGE1] = s_fPageEnabled[PPAGE_STAGE2] = s_fPageEnabled[PPAGE_STAGE3] = s_fPageEnabled[PPAGE_STAGE4] = s_fPageEnabled[PPAGE_STAGE5] = s_fPageEnabled[PPAGE_SILENTINSTALL] = s_fPageEnabled[PPAGE_COMPURLS] = s_fPageEnabled[PPAGE_INSTALLDIR] = FALSE; } else { s_fPageEnabled[PPAGE_OCWSTAGE2] = FALSE; } // Special case IMAP page if (g_fDisableIMAPPage) s_fPageEnabled[PPAGE_IMAP] = FALSE; DisableIEAKLiteGroups(); } BOOL PageEnabled(int iPage) { TCHAR szTemp[4]; // this should eventually just index into s_fPageEnabled, but for now we need to do this // manually since we must still use the page array for PageNext and PageBack if (iPage == PPAGE_COMPURLS) return (g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled || !GetPrivateProfileString(IS_ACTIVESETUP_SITES, TEXT("SiteUrl0"), TEXT(""), szTemp, countof(szTemp), g_szCustIns)); return TRUE; // default to show page } static TCHAR s_aSzTitle[NUM_PAGES][MAX_PATH]; void PageNext(HWND hDlg) { if (s_fPageEnabled[++g_iCurPage]) return; while (1) { if (s_fPageEnabled[++g_iCurPage]) { DWORD id = (DWORD) PtrToUlong(g_psp[g_iCurPage].pszTemplate); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, id); return; } } SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_FINISH); } void PagePrev(HWND hDlg) { if (s_fPageEnabled[--g_iCurPage]) return; while (1) { if (s_fPageEnabled[--g_iCurPage]) { DWORD id = (DWORD) PtrToUlong(g_psp[g_iCurPage].pszTemplate); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, id); return; } } SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_KEYINS); } SHFILEOPSTRUCT g_shfStruc; void DoCancel() { g_fCancelled = TRUE; g_fOCWCancel = TRUE; if (g_hDownloadEvent) SetEvent(g_hDownloadEvent); PostQuitMessage(0); } BOOL QueryCancel(HWND hDlg) { TCHAR szMsg[MAX_PATH]; LoadString( g_rvInfo.hInst, IDS_CANCELOK, szMsg, countof(szMsg) ); if (MessageBox(hDlg, szMsg, g_szTitle, MB_YESNO | MB_SETFOREGROUND) == IDNO) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); g_fCancelled = FALSE; return(FALSE); } DoCancel(); return(TRUE); } BOOL IeakPageHelp(HWND hWnd, LPCTSTR pszData) { static TCHAR szHelpPath[MAX_PATH] = TEXT(""); UNREFERENCED_PARAMETER(hWnd); if (ISNULL(szHelpPath)) PathCombine(szHelpPath, g_szWizRoot, TEXT("ieakhelp.chm")); // (pritobla): If we pass hWnd to HtmlHelp, the HTML help window // would stay on top of our window (parent->child relationship). // This is bad because the user can't switch between these windows // for cross referencing. This is especially bad on a 640x480 // resolution monitor. s_hWndHelp = HtmlHelp(NULL, szHelpPath, HH_HELP_CONTEXT, (ULONG_PTR) pszData); // (pritobla): On OSR2 machines, the HTML help window comes up behind // our window. On a 640x480 resolution monitor, we pretty much occupy // the entire screen, so the user won't know that the HTML help window // is up. Setting it to the foreground solves the problem. SetForegroundWindow(s_hWndHelp); return TRUE; } extern DWORD BuildIE4(LPVOID ); // // FUNCTION: MainWndProc(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for the main window procedure // // MESSAGES: // // WM_CREATE - creates the main MLE for the window // WM_COMMAND - processes the menu commands for the application // WM_SIZE - sizes the MLE to fill the client area of the window // WM_DESTROY - posts a quit message and returns // LRESULT APIENTRY MainWndProc( HWND hWnd, // window handle UINT message, // type of message WPARAM wParam, // additional information LPARAM lParam) // additional information { int i; switch (message) { case WM_CREATE: return FALSE; case WM_INITDIALOG: return FALSE; case WM_SIZE: if (!IsIconic(hWnd) && (hWnd != g_hWndCent)) ShowWindow(hWnd, SW_MINIMIZE); if (g_hWizard != NULL) SetFocus(g_hWizard); return (DefWindowProc(hWnd, message, wParam, lParam)); case WM_HELP: IeakPageHelp(hWnd, g_psp[g_iCurPage].pszTemplate); break; case WM_COMMAND: switch( LOWORD( wParam )) { case IDM_WIZARD: if (g_fCancelled) break; i = CreateWizard(g_hWndCent); if (i < 0) { PostQuitMessage(0); break; } PostMessage(hWnd, WM_COMMAND, IDM_LAST, (LPARAM) 0); break; case IDM_LAST: PostQuitMessage(0); break; case IDM_EXIT: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_CLOSE: QueryCancel(hWnd); break; case WM_DESTROY: /* message: window being destroyed */ PostQuitMessage(0); DestroyWindow(g_hWndCent); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); } DWORD GetRootFree(LPCTSTR pcszPath) { DWORD dwSecPerClus, dwBytesPerSec, dwTotClusters, dwFreeClusters, dwClustK; CHAR szPathA[MAX_PATH]; // thunk to ANSI since shlwapi doesn't have a wrapper fot GetDiskFreeSpace and // the W version is stubbed out on Win95 T2Abux(pcszPath, szPathA); if (szPathA[1] == ':') { szPathA[3] = '\0'; } else { if ((szPathA[0] == '\\') && (szPathA[1] == '\\')) { NETRESOURCEA netRes; DWORD erc = ERROR_ALREADY_ASSIGNED; CHAR szLocalPathA[4] = "D:"; LPSTR pBack = StrChrA(&szPathA[2], '\\'); if (!pBack) return(0); pBack = StrChrA(CharNextA(pBack), '\\'); if (pBack) *pBack = '\0'; ZeroMemory(&netRes, sizeof(netRes)); netRes.dwType = RESOURCETYPE_DISK; netRes.lpRemoteName = szPathA; for (*szLocalPathA = 'D'; *szLocalPathA <= 'Z' ; (*szLocalPathA)++ ) { netRes.lpLocalName = szLocalPathA; erc = WNetAddConnection2A(&netRes, NULL, NULL, 0); if (erc == ERROR_ALREADY_ASSIGNED) continue; if (erc == NO_ERROR) break; } if (erc == NO_ERROR) { if (!GetDiskFreeSpaceA( szLocalPathA, &dwSecPerClus, &dwBytesPerSec, &dwFreeClusters, &dwTotClusters )) dwSecPerClus = dwBytesPerSec = 0; WNetCancelConnection2A(szLocalPathA, 0, FALSE); if (dwSecPerClus == 1) return(dwFreeClusters/2); dwClustK = dwSecPerClus * dwBytesPerSec / 1024; return(dwClustK * dwFreeClusters); } } else return(0); } if (!GetDiskFreeSpaceA( szPathA, &dwSecPerClus, &dwBytesPerSec, &dwFreeClusters, &dwTotClusters )) return(0); if (dwSecPerClus == 1) return(dwFreeClusters/2); dwClustK = dwSecPerClus * dwBytesPerSec / 1024; return(dwClustK * dwFreeClusters); } void CheckBatchAdvance(HWND hDlg) { if (g_fBatch || g_fBatch2) PostMessage(hDlg, IDM_BATCHADVANCE, 0, 0); } void DoBatchAdvance(HWND hDlg) { if (g_fBatch || g_fBatch2) PostMessage(GetParent(hDlg), PSM_PRESSBUTTON, PSBTN_NEXT, 0); } INT_PTR CALLBACK MediaDlgProc(HWND hDlg, UINT uMsg, WPARAM, LPARAM lParam) { static BOOL s_fNext = TRUE; switch (uMsg) { case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); g_fDownload = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_Download"), 1, g_szCustIns); g_fCD = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_CD"), 0, g_szCustIns); g_fLAN = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_LAN"), 0, g_szCustIns); g_fBrandingOnly = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_BrandingOnly"), 0, g_szCustIns); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKDL))) CheckDlgButton(hDlg, IDC_CHECKDL, g_fDownload ? BST_CHECKED : BST_UNCHECKED); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKCD))) CheckDlgButton(hDlg, IDC_CHECKCD, g_fCD ? BST_CHECKED : BST_UNCHECKED); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKLAN))) CheckDlgButton(hDlg, IDC_CHECKLAN, g_fLAN ? BST_CHECKED : BST_UNCHECKED); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKSDB))) CheckDlgButton(hDlg, IDC_CHECKSDB, g_fBrandingOnly ? BST_CHECKED : BST_UNCHECKED); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: g_fDownload = g_fCD = g_fLAN = g_fBrandingOnly = FALSE; if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKDL))) g_fDownload = (IsDlgButtonChecked(hDlg, IDC_CHECKDL) == BST_CHECKED); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKCD))) g_fCD = (IsDlgButtonChecked(hDlg, IDC_CHECKCD) == BST_CHECKED); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKLAN))) g_fLAN = (IsDlgButtonChecked(hDlg, IDC_CHECKLAN) == BST_CHECKED); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKSDB))) g_fBrandingOnly = (IsDlgButtonChecked(hDlg, IDC_CHECKSDB) == BST_CHECKED); // if none of the media boxes are selected, display an error msg if (!g_fDownload && !g_fCD && !g_fLAN && !g_fBrandingOnly) { ErrorMessageBox(hDlg, IDS_NOMEDIA); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } WritePrivateProfileString(TEXT("Media"), TEXT("Build_Download"), g_fDownload ? TEXT("1") : TEXT("0"), g_szCustIns ); WritePrivateProfileString(TEXT("Media"), TEXT("Build_CD"), g_fCD ? TEXT("1") : TEXT("0"), g_szCustIns ); WritePrivateProfileString(TEXT("Media"), TEXT("Build_LAN"), g_fLAN ? TEXT("1") : TEXT("0"), g_szCustIns ); WritePrivateProfileString(TEXT("Media"), TEXT("Build_BrandingOnly"), g_fBrandingOnly ? TEXT("1") : TEXT("0"), g_szCustIns ); s_fNext = (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) ? FALSE : TRUE; g_iCurPage = PPAGE_MEDIA; EnablePages(); (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; default: return FALSE; } return TRUE; } void DisplayBitmap(HWND hControl, LPCTSTR pcszFileName, int nBitmapId) { HANDLE hBmp = (HANDLE) GetWindowLongPtr(hControl, GWLP_USERDATA); if(ISNONNULL(pcszFileName) && PathFileExists(pcszFileName)) ShowBitmap(hControl, pcszFileName, 0, &hBmp); else ShowBitmap(hControl, TEXT(""), nBitmapId, &hBmp); SetWindowLongPtr(hControl, GWLP_USERDATA, (LONG_PTR)hBmp); } void ReleaseBitmap(HWND hControl) { HANDLE hBmp = (HANDLE) GetWindowLongPtr(hControl, GWLP_USERDATA); if (hBmp) DeleteObject(hBmp); } void InitializeAnimBmps(HWND hDlg, LPCTSTR szInsFile) { TCHAR szBig[MAX_PATH]; TCHAR szSmall[MAX_PATH]; BOOL fBrandBmps; // load information from ins file fBrandBmps = InsGetString(IS_ANIMATION, TEXT("Big_Path"), szBig, countof(szBig), szInsFile); SetDlgItemTextTriState(hDlg, IDE_BIGANIMBITMAP, IDC_ANIMBITMAP, szBig, fBrandBmps); InsGetString(IS_ANIMATION, TEXT("Small_Path"), szSmall, countof(szSmall), szInsFile, NULL, &fBrandBmps); SetDlgItemTextTriState(hDlg, IDE_SMALLANIMBITMAP, IDC_ANIMBITMAP, szSmall, fBrandBmps); EnableDlgItem2(hDlg, IDE_BIGANIMBITMAP, fBrandBmps); EnableDlgItem2(hDlg, IDC_BROWSEBIG, fBrandBmps); EnableDlgItem2(hDlg, IDC_BIGANIMBITMAP_TXT, fBrandBmps); EnableDlgItem2(hDlg, IDE_SMALLANIMBITMAP, fBrandBmps); EnableDlgItem2(hDlg, IDC_BROWSESMALL, fBrandBmps); EnableDlgItem2(hDlg, IDC_SMALLANIMBITMAP_TXT, fBrandBmps); } // // FUNCTION: CustIcon(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for "Work Habits" page // // MESSAGES: // // WM_INITDIALOG - intializes the page // WM_NOTIFY - processes the notifications sent to the page // WM_COMMAND - saves the id of the choice selected // INT_PTR CALLBACK CustIcon( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { TCHAR szBig[MAX_PATH]; TCHAR szSmall[MAX_PATH]; TCHAR szLargeBmp[MAX_PATH]; TCHAR szSmallBmp[MAX_PATH]; LPDRAWITEMSTRUCT lpDrawItem = NULL; TCHAR szWorkDir[MAX_PATH]; BOOL fBrandBmps,fBrandAnim; switch( msg ) { case WM_INITDIALOG: //from anim EnableDBCSChars(hDlg, IDE_SMALLANIMBITMAP); EnableDBCSChars(hDlg, IDE_BIGANIMBITMAP); Edit_LimitText(GetDlgItem(hDlg, IDE_SMALLANIMBITMAP), countof(szSmallBmp) - 1); Edit_LimitText(GetDlgItem(hDlg, IDE_BIGANIMBITMAP), countof(szLargeBmp) - 1); //custicon EnableDBCSChars(hDlg, IDC_BITMAP); EnableDBCSChars(hDlg, IDC_BITMAP2); Edit_LimitText(GetDlgItem(hDlg, IDC_BITMAP), countof(szBig) - 1); Edit_LimitText(GetDlgItem(hDlg, IDC_BITMAP2), countof(szSmall) - 1); g_hWizard = hDlg; break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_BROWSEBIG: GetDlgItemText(hDlg, IDE_BIGANIMBITMAP, szLargeBmp, countof(szLargeBmp)); if(BrowseForFile(hDlg, szLargeBmp, countof(szLargeBmp), GFN_BMP)) SetDlgItemText(hDlg, IDE_BIGANIMBITMAP, szLargeBmp); break; case IDC_BROWSESMALL: GetDlgItemText(hDlg, IDE_SMALLANIMBITMAP, szSmallBmp, countof(szSmallBmp)); if(BrowseForFile(hDlg, szSmallBmp, countof(szSmallBmp), GFN_BMP)) SetDlgItemText(hDlg, IDE_SMALLANIMBITMAP, szSmallBmp); break; case IDC_ANIMBITMAP: fBrandAnim = (IsDlgButtonChecked(hDlg, IDC_ANIMBITMAP) == BST_CHECKED); EnableDlgItem2(hDlg, IDE_BIGANIMBITMAP, fBrandAnim); EnableDlgItem2(hDlg, IDC_BROWSEBIG, fBrandAnim); EnableDlgItem2(hDlg, IDC_BIGANIMBITMAP_TXT, fBrandAnim); EnableDlgItem2(hDlg, IDE_SMALLANIMBITMAP, fBrandAnim); EnableDlgItem2(hDlg, IDC_BROWSESMALL, fBrandAnim); EnableDlgItem2(hDlg, IDC_SMALLANIMBITMAP_TXT, fBrandAnim); break; case IDC_BROWSEICON: if(HIWORD(wParam) == BN_CLICKED) { GetDlgItemText(hDlg, IDC_BITMAP, szBig, countof(szBig)); if(BrowseForFile(hDlg, szBig, countof(szBig), GFN_BMP)) SetDlgItemText(hDlg, IDC_BITMAP, szBig); break; } return FALSE; case IDC_BROWSEICON2: if(HIWORD(wParam) == BN_CLICKED) { GetDlgItemText(hDlg, IDC_BITMAP2, szSmall, countof(szSmall)); if(BrowseForFile(hDlg, szSmall, countof(szSmall), GFN_BMP)) SetDlgItemText(hDlg, IDC_BITMAP2, szSmall); break; } return FALSE; case IDC_BITMAPCHECK: if(HIWORD(wParam) == BN_CLICKED) { fBrandBmps = (IsDlgButtonChecked(hDlg, IDC_BITMAPCHECK) == BST_CHECKED); EnableDlgItem2(hDlg, IDC_BITMAP, fBrandBmps); EnableDlgItem2(hDlg, IDC_BROWSEICON, fBrandBmps); EnableDlgItem2(hDlg, IDC_LARGEBITMAP_TXT, fBrandBmps); EnableDlgItem2(hDlg, IDC_BROWSEICON2, fBrandBmps); EnableDlgItem2(hDlg, IDC_BITMAP2, fBrandBmps); EnableDlgItem2(hDlg, IDC_SMALLBITMAP_TXT, fBrandBmps); break; } return FALSE; default: return FALSE; } break; case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT | PSWIZB_BACK); // load information from ins file InitializeAnimBmps(hDlg, g_szCustIns); InsGetString(IS_SMALLLOGO, TEXT("Path"), szSmall, countof(szSmall), g_szCustIns); InsGetString(IS_LARGELOGO, TEXT("Path"), szBig, countof(szBig), g_szCustIns, NULL, &fBrandBmps); SetDlgItemTextTriState(hDlg, IDC_BITMAP2, IDC_BITMAPCHECK, szSmall, fBrandBmps); SetDlgItemTextTriState(hDlg, IDC_BITMAP, IDC_BITMAPCHECK, szBig, fBrandBmps); EnableDlgItem2(hDlg, IDC_BROWSEICON, fBrandBmps); EnableDlgItem2(hDlg, IDC_BROWSEICON2, fBrandBmps); EnableDlgItem2(hDlg, IDC_LARGEBITMAP_TXT, fBrandBmps); EnableDlgItem2(hDlg, IDC_SMALLBITMAP_TXT, fBrandBmps); { TCHAR szTmp[MAX_PATH]; if (ISNONNULL(szSmall)) { PathCombine(szTmp, g_szTempSign, PathFindFileName(szSmall)); DeleteFile(szTmp); } if (ISNONNULL(szBig)) { PathCombine(szTmp, g_szTempSign, PathFindFileName(szBig)); DeleteFile(szTmp); } } CheckBatchAdvance(hDlg); break; case PSN_WIZNEXT: case PSN_WIZBACK: //from animbmp g_cmCabMappings.GetFeatureDir(FEATURE_BRAND, szWorkDir); GetDlgItemTextTriState(hDlg, IDE_SMALLANIMBITMAP, IDC_ANIMBITMAP, szSmallBmp, countof(szSmallBmp)); fBrandAnim = GetDlgItemTextTriState(hDlg, IDE_BIGANIMBITMAP, IDC_ANIMBITMAP, szLargeBmp, countof(szLargeBmp)); if ((fBrandAnim && !IsAnimBitmapFileValid(hDlg, IDE_BIGANIMBITMAP, szLargeBmp, NULL, IDS_TOOBIG38, IDS_TOOSMALL38, 38, 38)) || !CopyAnimBmp(hDlg, szLargeBmp, szWorkDir, IK_LARGEBITMAP, TEXT("Big_Path"), g_szCustIns)) { SetFocus(GetDlgItem(hDlg, IDE_BIGANIMBITMAP)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if ((fBrandAnim && !IsAnimBitmapFileValid(hDlg, IDE_SMALLANIMBITMAP, szSmallBmp, NULL, IDS_TOOBIG22, IDS_TOOSMALL22, 22, 22)) || !CopyAnimBmp(hDlg, szSmallBmp, szWorkDir, IK_SMALLBITMAP, TEXT("Small_Path"), g_szCustIns)) { SetFocus(GetDlgItem(hDlg, IDE_SMALLANIMBITMAP)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if ((fBrandAnim && ISNULL(szSmallBmp) && ISNONNULL(szLargeBmp)) || (fBrandAnim && ISNONNULL(szSmallBmp) && ISNULL(szLargeBmp))) { ErrorMessageBox(hDlg, IDS_BOTHBMP_ERROR); if (ISNULL(szSmallBmp)) SetFocus(GetDlgItem(hDlg, IDE_SMALLANIMBITMAP)); else SetFocus(GetDlgItem(hDlg, IDE_BIGANIMBITMAP)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } InsWriteBool(IS_ANIMATION, IK_DOANIMATION, fBrandAnim, g_szCustIns); //custicon fBrandBmps = (IsDlgButtonChecked(hDlg, IDC_BITMAPCHECK) == BST_CHECKED); //----- Validate the bitmap ----- GetDlgItemText(hDlg, IDC_BITMAP2, szSmall, countof(szSmall)); if (fBrandBmps && !IsBitmapFileValid(hDlg, IDC_BITMAP2, szSmall, NULL, 22, 22, IDS_TOOBIG22, IDS_TOOSMALL22)) { SetFocus(GetDlgItem(hDlg, IDC_BITMAP2)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } CopyLogoBmp(hDlg, szSmall, IS_SMALLLOGO, szWorkDir, g_szCustIns); GetDlgItemText(hDlg, IDC_BITMAP, szBig, countof(szBig)); if (fBrandBmps && !IsBitmapFileValid(hDlg, IDC_BITMAP, szBig, NULL, 38, 38, IDS_TOOBIG38, IDS_TOOSMALL38)) { SetFocus(GetDlgItem(hDlg, IDC_BITMAP)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } CopyLogoBmp(hDlg, szBig, IS_LARGELOGO, szWorkDir, g_szCustIns); if ((fBrandBmps && ISNULL(szSmall) && ISNONNULL(szBig)) || (fBrandBmps && ISNONNULL(szSmall) && ISNULL(szBig))) { ErrorMessageBox(hDlg, IDS_BOTHBMP_ERROR); if (ISNULL(szSmall)) SetFocus(GetDlgItem(hDlg, IDC_BITMAP2)); else SetFocus(GetDlgItem(hDlg, IDC_BITMAP)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } g_iCurPage = PPAGE_CUSTICON; EnablePages(); if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else PagePrev(hDlg); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; default: return FALSE; } return TRUE; } INT_PTR CALLBACK Favorites(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { TCHAR szWorkDir[MAX_PATH], szValue[16], szUrl[INTERNET_MAX_URL_LENGTH]; HWND hTv = GetDlgItem(hDlg, IDC_TREE1); LPCTSTR pszValue; BOOL fQL, fFavoritesOnTop, fFavoritesDelete, fIEAKFavoritesDelete; DWORD dwFavoritesDeleteFlags; switch(msg) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDC_TREE1); MigrateFavorites(g_szCustIns); #ifdef UNICODE TreeView_SetUnicodeFormat(hTv, TRUE); #else TreeView_SetUnicodeFormat(hTv, FALSE); #endif g_hWizard = hDlg; break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_COMMAND: switch(HIWORD(wParam)) { case BN_CLICKED: switch(LOWORD(wParam)) { case IDC_FAVONTOP: if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_FAVONTOP)) { HTREEITEM hti; TV_ITEM tvi; EnableDlgItem(hDlg, IDC_FAVONTOP); hti = TreeView_GetSelection(hTv); if (hti != NULL) { ZeroMemory(&tvi, sizeof(tvi)); tvi.mask = TVIF_STATE; tvi.hItem = hti; TreeView_GetItem(hTv, &tvi); if (!HasFlag(tvi.state, TVIS_BOLD)) { EnableDlgItem2(hDlg, IDC_FAVUP, (NULL != TreeView_GetPrevSibling(hTv, hti))); EnableDlgItem2(hDlg, IDC_FAVDOWN, (NULL != TreeView_GetNextSibling(hTv, hti))); } } } else { DisableDlgItem(hDlg, IDC_FAVUP); DisableDlgItem(hDlg, IDC_FAVDOWN); } break; case IDC_DELFAVORITES: fFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELFAVORITES) == BST_CHECKED); EnableDlgItem2(hDlg, IDC_DELIEAKFAVORITES, fFavoritesDelete); break; case IDC_FAVUP: MoveUpFavorite(hTv, TreeView_GetSelection(hTv)); break; case IDC_FAVDOWN: MoveDownFavorite(hTv, TreeView_GetSelection(hTv)); break; case IDC_ADDURL: fQL = !IsFavoriteItem(hTv, TreeView_GetSelection(hTv)); if (GetFavoritesNumber(hTv, fQL) >= GetFavoritesMaxNumber(fQL)) { UINT nID; nID = (!fQL ? IDS_ERROR_MAXFAVS : IDS_ERROR_MAXQLS); ErrorMessageBox(hDlg, nID); break; } g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir); NewUrl(hTv, szWorkDir, g_dwPlatformId, g_fIntranet ? IEM_CORP : IEM_NEUTRAL); break; case IDC_ADDFOLDER: ASSERT(IsFavoriteItem(hTv, TreeView_GetSelection(hTv))); if (GetFavoritesNumber(hTv) >= GetFavoritesMaxNumber()) { ErrorMessageBox(hDlg, IDS_ERROR_MAXFAVS); break; } NewFolder(hTv); break; case IDC_MODIFY: g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir); ModifyFavorite(hTv, TreeView_GetSelection(hTv), szWorkDir, g_szTempSign, g_dwPlatformId, g_fIntranet ? IEM_CORP : IEM_NEUTRAL); break; case IDC_REMOVE: g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir); DeleteFavorite(hTv, TreeView_GetSelection(hTv), szWorkDir); break; case IDC_TESTFAVURL: if (GetFavoriteUrl(hTv, TreeView_GetSelection(hTv), szUrl, countof(szUrl))) TestURL(szUrl); break; case IDC_IMPORT: { CNewCursor cursor(IDC_WAIT); g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir); ImportFavoritesCmd(hTv, szWorkDir); break; } } } break; case WM_NOTIFY: switch(((NMHDR FAR *)lParam)->code) { case PSN_SETACTIVE: SetBannerText(hDlg); g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir); PathCreatePath(szWorkDir); ASSERT(GetFavoritesNumber(hTv, FALSE) == 0 && GetFavoritesNumber(hTv, TRUE) == 0); ImportFavorites (hTv, g_szDefInf, g_szCustIns, szWorkDir, g_szTempSign, !g_fIntranet); ImportQuickLinks(hTv, g_szDefInf, g_szCustIns, szWorkDir, g_szTempSign, !g_fIntranet); TreeView_SelectItem(hTv, TreeView_GetRoot(hTv)); fFavoritesOnTop = GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_ONTOP, (int)FALSE, g_szCustIns); CheckDlgButton(hDlg, IDC_FAVONTOP, fFavoritesOnTop ? BST_CHECKED : BST_UNCHECKED); //delete channels checkbox if (g_fIntranet) { EnableDlgItem(hDlg, IDC_DELETECHANNELS); ShowDlgItem (hDlg, IDC_DELETECHANNELS); ReadBoolAndCheckButton(IS_DESKTOPOBJS, IK_DELETECHANNELS, FALSE, g_szCustIns, hDlg, IDC_DELETECHANNELS); } else { DisableDlgItem(hDlg, IDC_DELETECHANNELS); HideDlgItem (hDlg, IDC_DELETECHANNELS); } if (!fFavoritesOnTop) { DisableDlgItem(hDlg, IDC_FAVUP); DisableDlgItem(hDlg, IDC_FAVDOWN); } if (g_fIntranet) { ShowWindow(GetDlgItem(hDlg, IDC_DELFAVORITES), SW_SHOW); ShowWindow(GetDlgItem(hDlg, IDC_DELIEAKFAVORITES), SW_SHOW); dwFavoritesDeleteFlags = (DWORD) GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_DELETE, (int)FD_DEFAULT, g_szCustIns); fFavoritesDelete = HasFlag(dwFavoritesDeleteFlags, ~FD_REMOVE_IEAK_CREATED); CheckDlgButton(hDlg, IDC_DELFAVORITES, fFavoritesDelete ? BST_CHECKED : BST_UNCHECKED); fIEAKFavoritesDelete = HasFlag(dwFavoritesDeleteFlags, FD_REMOVE_IEAK_CREATED); CheckDlgButton(hDlg, IDC_DELIEAKFAVORITES, fIEAKFavoritesDelete ? BST_CHECKED : BST_UNCHECKED); // only if delete Favorites is TRUE should the delete IEAK Favorites checkbox be enabled EnableDlgItem2(hDlg, IDC_DELIEAKFAVORITES, fFavoritesDelete); } else { ShowWindow(GetDlgItem(hDlg, IDC_DELFAVORITES), SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_DELIEAKFAVORITES), SW_HIDE); } CheckBatchAdvance(hDlg); break; case TVN_GETINFOTIP: ASSERT(wParam == IDC_TREE1); GetFavoritesInfoTip((LPNMTVGETINFOTIP)lParam); break; case NM_DBLCLK: ASSERT(wParam == IDC_TREE1); if (IsWindowEnabled(GetDlgItem(hDlg, IDC_MODIFY))) SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_MODIFY, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_MODIFY)); break; case TVN_KEYDOWN: ASSERT(wParam == IDC_TREE1); if (((LPNMTVKEYDOWN)lParam)->wVKey == VK_DELETE && IsWindowEnabled(GetDlgItem(hDlg, IDC_REMOVE))) SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_REMOVE, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_REMOVE)); break; case TVN_SELCHANGED: ASSERT(wParam == IDC_TREE1); ProcessFavSelChange(hDlg, hTv, (LPNMTREEVIEW)lParam); break; case PSN_WIZBACK: case PSN_WIZNEXT: fFavoritesOnTop = (IsDlgButtonChecked(hDlg, IDC_FAVONTOP) == BST_CHECKED); dwFavoritesDeleteFlags = 0; szValue[0] = TEXT('\0'); pszValue = NULL; fFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELFAVORITES) == BST_CHECKED); fIEAKFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELIEAKFAVORITES) == BST_CHECKED); if (fFavoritesDelete) { // NOTE. (andrewgu) flags explanation: // 1. FD_FAVORITES means "empty favorites"; // 2. FD_CHANNELS means "don't delete channels folder"; // 3. FD_SOFTWAREUPDATES means "don't delete sofware updates folder"; // 4. FD_QUICKLINKS means "don't delete quick links folder"; // 5. FD_EMPTY_QUICKLINKS means "but make it empty"; // 6. FD_REMOVE_HIDDEN means "don't hesitate to party on HIDDEN folders and favorites"; // 7. FD_REMOVE_SYSTEM means "don't hesitate to party on SYSTEM folders and favorites"; dwFavoritesDeleteFlags |= FD_FAVORITES | FD_CHANNELS | FD_SOFTWAREUPDATES | FD_QUICKLINKS | FD_EMPTY_QUICKLINKS | FD_REMOVE_HIDDEN | FD_REMOVE_SYSTEM; } //delete channels if (g_fIntranet) CheckButtonAndWriteBool(hDlg, IDC_DELETECHANNELS, IS_DESKTOPOBJS, IK_DELETECHANNELS, g_szCustIns); if (fIEAKFavoritesDelete) // FD_REMOVE_IEAK_CREATED means "delete those items created by the IEAK"; dwFavoritesDeleteFlags |= FD_REMOVE_IEAK_CREATED; if (dwFavoritesDeleteFlags) { wnsprintf(szValue, countof(szValue), TEXT("0x%X"), dwFavoritesDeleteFlags); pszValue = szValue; } WritePrivateProfileString(IS_BRANDING, IK_FAVORITES_DELETE, pszValue, g_szCustIns); WritePrivateProfileString(IS_BRANDING, IK_FAVORITES_ONTOP, fFavoritesOnTop ? TEXT("1") : TEXT("0"), g_szCustIns); g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir); ExportFavorites (hTv, g_szCustIns, szWorkDir, TRUE); ExportQuickLinks(hTv, g_szCustIns, szWorkDir, TRUE); if (!g_fBatch) { // (pritobla) if in batch mode, no need to export to the old IE4 format // because there is no scenario that the ms install.ins will be installed // without the IE6 branding dll. MigrateToOldFavorites(g_szCustIns); } DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL); DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL); g_iCurPage = PPAGE_FAVORITES; EnablePages(); if (((LPNMHDR)lParam)->code != PSN_WIZBACK) PageNext(hDlg); else PagePrev(hDlg); break; case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_QUERYCANCEL: if (QueryCancel(hDlg)) { DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL); DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL); } break; default: return FALSE; } break; default: return FALSE; } return TRUE; } // // FUNCTION: Welcome(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for welcome page // // MESSAGES: // // WM_INITDIALOG - intializes the page // WM_NOTIFY - processes the notifications sent to the page // WM_COMMAND - saves the id of the choice selected // INT_PTR CALLBACK Welcome( HWND hDlg, UINT message, WPARAM, LPARAM lParam) { static fInitWindowPos = FALSE; switch (message) { case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_INITDIALOG: LoadString(g_rvInfo.hInst, IDS_TITLE, g_szTitle, countof(g_szTitle)); SetWindowText(g_hWndCent, g_szTitle); g_hWizard = hDlg; return(TRUE); case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: TCHAR szWizardVer[MAX_PATH]; TCHAR szType[MAX_PATH]; TCHAR szTemp1[MAX_PATH], szTemp2[MAX_PATH]; SetBannerText(hDlg); LoadString(g_rvInfo.hInst,IDS_WIZARDTYPETEXT,szWizardVer,countof(szWizardVer)); switch (s_iType) { case BRANDED: LoadString(g_rvInfo.hInst,IDS_ISPTYPE,szType,countof(szType)); break; case REDIST: LoadString(g_rvInfo.hInst,IDS_ICPTYPE,szType,countof(szType)); break; case INTRANET: default: LoadString(g_rvInfo.hInst,IDS_CORPTYPE,szType,countof(szType)); break; } wnsprintf(szTemp1,countof(szTemp1),szWizardVer,szType); wnsprintf(szTemp2,countof(szTemp2),s_szBannerText,szTemp1); StrCpy(s_szBannerText,szTemp2); ChangeBannerText(hDlg); PropSheet_SetTitle(hDlg, 0, s_aSzTitle[g_iCurPage]); if (g_fDone) { EndDialog(hDlg, 0); return FALSE; } if(!fInitWindowPos) { PositionWindow(GetParent(hDlg)); ShowWindow(GetParent(hDlg), SW_SHOWNORMAL); fInitWindowPos = TRUE; } PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: EnablePages(); if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else { PagePrev(hDlg); } break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; } break; default: return FALSE; } return TRUE; } // // FUNCTION: Stage(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for welcome page // // MESSAGES: // // WM_INITDIALOG - intializes the page // WM_NOTIFY - processes the notifications sent to the page // WM_COMMAND - saves the id of the choice selected // INT_PTR CALLBACK Stage( HWND hDlg, UINT message, WPARAM, LPARAM lParam) { switch (message) { case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_INITDIALOG: return(FALSE); case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); PropSheet_SetTitle(hDlg, 0, s_aSzTitle[g_iCurPage]); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else PagePrev(hDlg); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; } break; default: return FALSE; } return TRUE; } static UINT_PTR s_idTim; INT_PTR CALLBACK BrandTitle(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { TCHAR szTitle[MAX_PATH]; TCHAR szFullTitle[MAX_PATH]; TCHAR szTemp[MAX_PATH]; DWORD dwTitlePrefixLen; BOOL fTitle; switch (uMsg) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDE_TITLE); LoadString(g_rvInfo.hInst, IDS_TITLE_PREFIX, szTitle, countof(szTitle)); dwTitlePrefixLen = StrLen(szTitle); // browser will only display 74 chars before cutting off title Edit_LimitText(GetDlgItem(hDlg, IDE_TITLE), 74 - dwTitlePrefixLen); break; case WM_NOTIFY: switch (((LPNMHDR) lParam)->code) { case PSN_SETACTIVE: SetBannerText(hDlg); // title InsGetString(IS_BRANDING, TEXT("Window_Title_CN"), szTitle, countof(szTitle), g_szCustIns, NULL, &fTitle); if (!fTitle && *szTitle == '\0') InsGetString(IS_BRANDING, TEXT("CompanyName"), szTitle, countof(szTitle), g_szCustIns); SetDlgItemTextTriState(hDlg, IDE_TITLE, IDC_TITLE, szTitle, fTitle); EnableDlgItem2(hDlg, IDC_TITLE_TXT, fTitle); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: // title if (g_fBatch) { InsGetString(TEXT("BatchMode"), IK_WINDOWTITLE, szFullTitle, countof(szFullTitle), g_szCustIns); InsWriteString(IS_BRANDING, IK_WINDOWTITLE, szFullTitle, g_szCustIns, TRUE, NULL, INSIO_TRISTATE); InsGetString(TEXT("BatchMode"), TEXT("Window_Title_OE"), szFullTitle, countof(szFullTitle), g_szCustIns); InsWriteString(IS_INTERNETMAIL, IK_WINDOWTITLE, szFullTitle, g_szCustIns, TRUE, NULL, INSIO_TRISTATE); } else { fTitle = GetDlgItemTextTriState(hDlg, IDE_TITLE, IDC_TITLE, szTitle, countof(szTitle)); InsWriteString(IS_BRANDING, TEXT("Window_Title_CN"), szTitle, g_szCustIns, fTitle, NULL, INSIO_SERVERONLY | INSIO_TRISTATE); // browser title *szFullTitle = TEXT('\0'); if (*szTitle) { *szTemp = TEXT('\0'); InsGetString(IS_STRINGS, TEXT("IE_TITLE"), szTemp, countof(szTemp), g_szDefInf); if (*szTemp) wnsprintf(szFullTitle, countof(szFullTitle), szTemp, szTitle); } InsWriteString(IS_BRANDING, IK_WINDOWTITLE, szFullTitle, g_szCustIns, fTitle, NULL, INSIO_TRISTATE); // OE title *szFullTitle = TEXT('\0'); if (*szTitle) { *szTemp = TEXT('\0'); InsGetString(IS_STRINGS, TEXT("OE_TITLE"), szTemp, countof(szTemp), g_szDefInf); if (*szTemp) wnsprintf(szFullTitle, countof(szFullTitle), szTemp, szTitle); } InsWriteString(IS_INTERNETMAIL, IK_WINDOWTITLE, szFullTitle, g_szCustIns, fTitle, NULL, INSIO_TRISTATE); } g_iCurPage = PPAGE_TITLE; EnablePages(); (((LPNMHDR) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg); break; case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; case WM_COMMAND: if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED) return FALSE; switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_TITLE: fTitle = (IsDlgButtonChecked(hDlg, IDC_TITLE) == BST_CHECKED); EnableDlgItem2(hDlg, IDC_TITLE_TXT, fTitle); EnableDlgItem2(hDlg, IDE_TITLE, fTitle); break; default: return FALSE; } break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; default: return FALSE; } return TRUE; } INT_PTR CALLBACK WelcomeMessageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { TCHAR szInitHomePage[INTERNET_MAX_URL_LENGTH]; INT id; switch (uMsg) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDE_WELCOMEURL); Edit_LimitText(GetDlgItem(hDlg, IDE_WELCOMEURL), countof(szInitHomePage) - 1); break; case WM_NOTIFY: switch (((LPNMHDR) lParam)->code) { case PSN_SETACTIVE: SetBannerText(hDlg); g_fUseIEWelcomePage = !InsGetBool(IS_URL, IK_NO_WELCOME_URL, FALSE, g_szCustIns); InsGetString(IS_URL, IK_FIRSTHOMEPAGE, szInitHomePage, countof(szInitHomePage), g_szCustIns); if (g_fUseIEWelcomePage) id = IDC_WELCOMEDEF; else id = (*szInitHomePage ? IDC_WELCOMECUST : IDC_WELCOMENO); CheckRadioButton(hDlg, IDC_WELCOMEDEF, IDC_WELCOMECUST, id); if (id == IDC_WELCOMECUST) { SetDlgItemText(hDlg, IDE_WELCOMEURL, szInitHomePage); EnableDlgItem (hDlg, IDE_WELCOMEURL); } else DisableDlgItem(hDlg, IDE_WELCOMEURL); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: // if custom home page radio button is checked, verify that a URL is specified if (IsDlgButtonChecked(hDlg, IDC_WELCOMECUST) == BST_CHECKED) if (!CheckField(hDlg, IDE_WELCOMEURL, FC_NONNULL | FC_URL)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); return TRUE; } g_fUseIEWelcomePage = (IsDlgButtonChecked(hDlg, IDC_WELCOMEDEF) == BST_CHECKED); InsWriteBool(IS_URL, IK_NO_WELCOME_URL, !g_fUseIEWelcomePage, g_szCustIns); GetDlgItemText(hDlg, IDE_WELCOMEURL, szInitHomePage, countof(szInitHomePage)); InsWriteString(IS_URL, IK_FIRSTHOMEPAGE, szInitHomePage, g_szCustIns); g_iCurPage = PPAGE_WELCOMEMSGS; EnablePages(); (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg); break; case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; case WM_COMMAND: if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED) return FALSE; switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_WELCOMENO: case IDC_WELCOMEDEF: SetDlgItemText(hDlg, IDE_WELCOMEURL, TEXT("")); DisableDlgItem(hDlg, IDE_WELCOMEURL); break; case IDC_WELCOMECUST: EnableDlgItem(hDlg, IDE_WELCOMEURL); break; } break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; default: return FALSE; } return TRUE; } void LoadInsFile(LPCTSTR pcszNewInsFile) { TCHAR szSrcPath[MAX_PATH]; TCHAR szDestDir[MAX_PATH]; TCHAR szPlatform[8]; TCHAR szFilePath[MAX_PATH]; TCHAR szData[8]; CopyFile(pcszNewInsFile, g_szCustIns, FALSE); SetFileAttributes(g_szCustIns, FILE_ATTRIBUTE_NORMAL); StrCpy(szSrcPath, pcszNewInsFile); PathRemoveFileSpec(szSrcPath); StrCpy(szDestDir, g_szCustIns); PathRemoveFileSpec(szDestDir); // make sure platform info is correct wnsprintf(szPlatform, countof(szPlatform), TEXT("%lu"), g_dwPlatformId); WritePrivateProfileString(BRANDING, TEXT("Platform"), szPlatform, g_szCustIns); // the delete adms flag will be cleared out when we hit next on the adm page WritePrivateProfileString(IS_BRANDING, TEXT("DeleteAdms"), TEXT("1"), g_szCustIns); WritePrivateProfileString(IS_BRANDING, TEXT("ImportIns"), pcszNewInsFile, g_szCustIns); // branding.cab file is cross platform CopyFilesSrcToDest(szSrcPath, TEXT("BRANDING.CAB"), szDestDir); PathCombine(szFilePath, szSrcPath, TEXT("iesetup.inf")); // only copy over iesetup.inf if it's also a win32 inf if (GetPrivateProfileString(OPTIONS, TEXT("CifName"), TEXT(""), szData, countof(szData), szFilePath)) CopyFilesSrcToDest(szSrcPath, TEXT("iesetup.inf"), szDestDir); CopyFilesSrcToDest(szSrcPath, TEXT("iak.ini"), szDestDir); CopyFilesSrcToDest(szSrcPath, TEXT("iesetup.cif"), szDestDir); CopyFilesSrcToDest(szSrcPath, TEXT("custom.cif"), szDestDir); CopyFilesSrcToDest(szSrcPath, TEXT("DESKTOP.CAB"), szDestDir); CopyFilesSrcToDest(szSrcPath, TEXT("CHNLS.CAB"), szDestDir); SetAttribAllEx(szDestDir, TEXT("*.*"), FILE_ATTRIBUTE_NORMAL, FALSE); // clear out CMAK guid when importing so we'll generate a new one for this package PathCombine(szFilePath, szDestDir, TEXT("custom.cif")); WritePrivateProfileString( CUSTCMSECT, TEXT("GUID"), NULL, szFilePath ); WritePrivateProfileString( CUSTCMSECT, VERSION, NULL, szFilePath ); // copy singup files // BUGBUG: pritobla- should implement a function in ieakutil to xcopy a folder (including its subdirs) // to another location and use that function here. PathAppend(szSrcPath, TEXT("signup")); PathAppend(szDestDir, TEXT("signup")); PathAppend(szSrcPath, TEXT("icw")); PathAppend(szDestDir, TEXT("icw")); CopyFilesSrcToDest(szSrcPath, TEXT("*.*"), szDestDir); PathRemoveFileSpec(szSrcPath); PathRemoveFileSpec(szDestDir); PathAppend(szSrcPath, TEXT("kiosk")); PathAppend(szDestDir, TEXT("kiosk")); CopyFilesSrcToDest(szSrcPath, TEXT("*.*"), szDestDir); PathRemoveFileSpec(szSrcPath); PathRemoveFileSpec(szDestDir); PathAppend(szSrcPath, TEXT("servless")); PathAppend(szDestDir, TEXT("servless")); CopyFilesSrcToDest(szSrcPath, TEXT("*.*"), szDestDir); } // // FUNCTION: Language(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for "Language" page // // MESSAGES: // // WM_INITDIALOG - intializes the page // WM_NOTIFY - processes the notifications sent to the page // WM_COMMAND - saves the id of the choice selected // INT_PTR CALLBACK Language( HWND hDlg, UINT message, WPARAM, LPARAM lParam) { TCHAR szBuf[1024]; int i; static BOOL s_fNext = TRUE; TCHAR szTemp[MAX_PATH]; DWORD dwSelLangId; USES_CONVERSION; switch (message) { case WM_INITDIALOG: g_hWizard = hDlg; InitSysFont( hDlg, IDC_LANGUAGE); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); //from the download pg if (!g_fUrlsInit && !g_fBatch && !g_fBatch2 && !g_hWait && g_hDownloadEvent && !g_fLocalMode) { g_hWizard = hDlg; g_hWait = CreateDialog( g_rvInfo.hInst, MAKEINTRESOURCE(IDD_WAITSITES), hDlg, DownloadStatusDlgProc ); ShowWindow( g_hWait, SW_SHOWNORMAL ); PropSheet_SetWizButtons(GetParent(hDlg), 0 ); g_iDownloadState = DOWN_STATE_ENUM_URL; g_hDlg = hDlg; SetEvent(g_hDownloadEvent); } break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case IDM_INITIALIZE: if (g_hWait && g_fLangInit) { SendMessage(g_hWait, WM_CLOSE, 0, 0); g_hWait = NULL; } break; // this resets the focus away from cancel when we disable back/next case IDM_SETDEFBUTTON: SetFocus( GetDlgItem( GetParent(hDlg), IDC_STATIC ) ); SendMessage(GetParent(hDlg), DM_SETDEFID, (WPARAM)IDC_STATIC, (LPARAM)0); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_COMMAND: break; case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); if (!g_fLangInit && !g_fBatch && !g_fBatch2) { DWORD dwTid; g_iDownloadState = DOWN_STATE_ENUM_LANG; g_hDlg = hDlg; PropSheet_SetWizButtons(GetParent(hDlg), 0); if (!g_fLocalMode) { g_hWait = CreateDialog(g_rvInfo.hInst, MAKEINTRESOURCE(IDD_WAITSITES), hDlg, DownloadStatusDlgProc); ShowWindow( g_hWait, SW_SHOWNORMAL ); } g_hThread = CreateThread(NULL, 4096, DownloadSiteThreadProc, &g_hWizard, 0, &dwTid); PostMessage(hDlg, IDM_SETDEFBUTTON, 0, 0); break; } if (g_fOptCompInit) DisableDlgItem(hDlg, IDC_LANGUAGE); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: if (!g_nLangs && !g_fBatch && !g_fBatch2) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); g_fCancelled = FALSE; return(TRUE); } //original processing dwSelLangId = 1033; if (!g_fBatch && !g_fBatch2) { i = (int) SendDlgItemMessage( hDlg, IDC_LANGUAGE, CB_GETCURSEL, 0, 0 ); StrCpy(g_szLanguage + 1, g_aszLang[i]); *g_szLanguage = g_szLanguage[3] = TEXT('\\'); g_szLanguage[4] = TEXT('\0'); dwSelLangId = g_aLangId[i]; if (StrCmpI(g_szActLang, g_aszLang[i]) != 0) { s_fAppendLang = TRUE; g_fSrcDirChanged = TRUE; StrCpy(g_szActLang, g_aszLang[i]); } if (s_fAppendLang) { PathCombine(g_szIEAKProg, s_szSourceDir, &g_szLanguage[1]); if (!PathFileExists(g_szIEAKProg)) PathCreatePath(g_szIEAKProg); s_fAppendLang = FALSE; } } CharUpper(g_szLanguage); CharUpper(g_szActLang); StrCpy(szBuf, g_szLanguage + 1); szBuf[lstrlen(szBuf) - 1] = TEXT('\0'); GenerateCustomIns(); if (ISNONNULL(g_szLoadedIns) && s_fLoadIns) { TCHAR szLoadLang[8]; s_fLoadIns = FALSE; if (GetPrivateProfileString(IS_BRANDING, LANG_LOCALE, TEXT(""), szLoadLang, countof(szLoadLang), g_szLoadedIns) && (StrCmpI(szLoadLang, g_szActLang) != 0)) { TCHAR szMsgParam[MAX_PATH]; TCHAR szMsg[MAX_PATH*2]; LoadString(g_rvInfo.hInst, IDS_LANGDIFFERS, szMsgParam, countof(szMsgParam)); wnsprintf(szMsg, countof(szMsg), szMsgParam, g_szLoadedIns); if (MessageBox(hDlg, szMsg, g_szTitle, MB_YESNO) == IDNO) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); return TRUE; } } LoadInsFile(g_szLoadedIns); } wnsprintf(s_szType, countof(s_szType), TEXT("%i"), s_iType); WritePrivateProfileString(BRANDING, TEXT("Type"), s_szType, g_szCustIns); WritePrivateProfileString( BRANDING, IK_WIZVERSION, A2CT(VER_PRODUCTVERSION_STR), g_szCustIns ); //clear others so we know this is wizard WritePrivateProfileString(BRANDING, PMVERKEY, NULL, g_szCustIns); WritePrivateProfileString(BRANDING, GPVERKEY, NULL, g_szCustIns); StrCpy(szTemp, g_szKey); szTemp[7] = TEXT('\0'); WritePrivateProfileString( BRANDING, TEXT("Custom_Key"), szTemp, g_szCustIns ); if (*(g_rvInfo.pszName) == 0) GetPrivateProfileString(BRANDING, TEXT("CompanyName"), TEXT(""), g_rvInfo.pszName, countof(g_rvInfo.pszName), g_szCustIns); WritePrivateProfileString(BRANDING, TEXT("CompanyName"), g_rvInfo.pszName, g_szCustIns); if (g_iKeyType < KEY_TYPE_ENHANCED) { WritePrivateProfileString( TEXT("Animation"), NULL, NULL, g_szCustIns ); WritePrivateProfileString( TEXT("Big_Logo"), NULL, NULL, g_szCustIns ); WritePrivateProfileString( TEXT("Small_Logo"), NULL, NULL, g_szCustIns ); } if (!g_fBatch) { TCHAR szLngID[16]; wnsprintf(szLngID, countof(szLngID), TEXT("%lu"), dwSelLangId); WritePrivateProfileString(BRANDING, LANG_LOCALE, g_szActLang, g_szCustIns); WritePrivateProfileString(BRANDING, LANG_ID, szLngID, g_szCustIns); } g_iCurPage = PPAGE_LANGUAGE; EnablePages(); if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) { s_fNext = FALSE; PageNext(hDlg); } else { s_fNext = TRUE; PagePrev(hDlg); } break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; default: return FALSE; } return TRUE; } INT_PTR CALLBACK StartSearch(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL fStartPage, fSearchPage, fSupportPage; switch (uMsg) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDE_STARTPAGE); EnableDBCSChars(hDlg, IDE_SEARCHPAGE); EnableDBCSChars(hDlg, IDE_CUSTOMSUPPORT); Edit_LimitText(GetDlgItem(hDlg, IDE_STARTPAGE), INTERNET_MAX_URL_LENGTH - 1); Edit_LimitText(GetDlgItem(hDlg, IDE_SEARCHPAGE), INTERNET_MAX_URL_LENGTH - 1); Edit_LimitText(GetDlgItem(hDlg, IDE_CUSTOMSUPPORT), INTERNET_MAX_URL_LENGTH - 1); break; case WM_NOTIFY: switch (((LPNMHDR) lParam)->code) { case PSN_SETACTIVE: SetBannerText(hDlg); InitializeStartSearch(hDlg, g_szCustIns, NULL); CheckBatchAdvance(hDlg); break; case PSN_WIZBACK: case PSN_WIZNEXT: fStartPage = (IsDlgButtonChecked(hDlg, IDC_STARTPAGE) == BST_CHECKED); fSearchPage = (IsDlgButtonChecked(hDlg, IDC_SEARCHPAGE) == BST_CHECKED); fSupportPage = (IsDlgButtonChecked(hDlg, IDC_CUSTOMSUPPORT) == BST_CHECKED); if ((fStartPage && !CheckField(hDlg, IDE_STARTPAGE, FC_URL)) || (fSearchPage && !CheckField(hDlg, IDE_SEARCHPAGE, FC_URL)) || (fSupportPage && !CheckField(hDlg, IDE_CUSTOMSUPPORT, FC_URL))) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); return TRUE; } SaveStartSearch(hDlg, g_szCustIns, NULL); g_iCurPage = PPAGE_STARTSEARCH; EnablePages(); (((LPNMHDR) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg); break; case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; case WM_COMMAND: if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED) return FALSE; switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_STARTPAGE: fStartPage = (IsDlgButtonChecked(hDlg, IDC_STARTPAGE) == BST_CHECKED); EnableDlgItem2(hDlg, IDE_STARTPAGE, fStartPage); EnableDlgItem2(hDlg, IDC_STARTPAGE_TXT, fStartPage); break; case IDC_SEARCHPAGE: fSearchPage = (IsDlgButtonChecked(hDlg, IDC_SEARCHPAGE) == BST_CHECKED); EnableDlgItem2(hDlg, IDE_SEARCHPAGE, fSearchPage); EnableDlgItem2(hDlg, IDC_SEARCHPAGE_TXT, fSearchPage); break; case IDC_CUSTOMSUPPORT: fSupportPage = (IsDlgButtonChecked(hDlg, IDC_CUSTOMSUPPORT) == BST_CHECKED); EnableDlgItem2(hDlg, IDE_CUSTOMSUPPORT, fSupportPage); EnableDlgItem2(hDlg, IDC_CUSTOMSUPPORT_TXT, fSupportPage); break; default: return FALSE; } break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; default: return FALSE; } return TRUE; } INT_PTR CALLBACK Finish(HWND hDlg, UINT message, WPARAM, LPARAM lParam) { TCHAR szPlatform[8]; TCHAR szWinDir[MAX_PATH]; static s_fFinished = FALSE; switch (message) { case WM_INITDIALOG: g_hWizard = hDlg; if (s_fFinished) EnableDBCSChars(hDlg, IDC_FINISHTXT3); break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case WM_COMMAND: break; case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); if (!s_fFinished) { PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); ShowWindow(GetDlgItem(hDlg, IDC_FINISHTXT1), SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_STEP1), SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_STEP3), SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_PROGRESS), SW_HIDE); CheckBatchAdvance(hDlg); } else { SetWindowText(GetDlgItem(hDlg, IDC_FINISHTXT3), g_szBuildRoot); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_FINISH); if (g_fBatch || g_fBatch2) PostMessage(GetParent(hDlg), PSM_PRESSBUTTON, PSBTN_FINISH, 0); } break; case PSN_WIZBACK: PagePrev(hDlg); break; case PSN_WIZNEXT: if (!g_fCancelled && !g_fDemo) { CNewCursor cur(IDC_WAIT); HANDLE hThread; DWORD dwTid; wnsprintf(szPlatform, countof(szPlatform), TEXT("%lu"), g_dwPlatformId); WritePrivateProfileString(BRANDING, TEXT("Platform"), szPlatform, g_szCustIns); ShowWindow(GetDlgItem(hDlg, IDC_FINISHTXT1), SW_SHOW); ShowWindow(GetDlgItem(hDlg, IDC_STEP1), SW_SHOW); ShowWindow(GetDlgItem(hDlg, IDC_STEP3), SW_SHOW); ShowWindow(GetDlgItem(hDlg, IDC_PROGRESS), SW_SHOW); PropSheet_SetWizButtons(GetParent(hDlg), 0); DisableDlgItem(GetParent(hDlg), IDHELP); DisableDlgItem(GetParent(hDlg), IDCANCEL); Animate_Open( GetDlgItem( hDlg, IDC_ANIM ), IDA_GEARS ); Animate_Play( GetDlgItem( hDlg, IDC_ANIM ), 0, -1, -1 ); SetAttribAllEx(g_szBuildRoot, TEXT("*.*"), FILE_ATTRIBUTE_NORMAL, TRUE); g_fCancelled = TRUE; GetWindowsDirectory(szWinDir, MAX_PATH); memset(&g_shfStruc, 0, sizeof(g_shfStruc)); g_shfStruc.hwnd = hDlg; g_shfStruc.wFunc = FO_COPY; SetAttribAllEx(g_szBuildTemp, TEXT("*.*"), FILE_ATTRIBUTE_NORMAL, TRUE); hThread = CreateThread(NULL, 4096, BuildIE4, hDlg, 0, &dwTid); while (MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0) { MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } CloseHandle(hThread); // this sets the last 'platform/language' package built in this build directory. // its used to get the settings used in the last .ins file. { TCHAR szPlatformLang[MAX_PATH]; TCHAR szRegKey[MAX_PATH]; wnsprintf(szRegKey, countof(szRegKey), TEXT("%s\\INS"), RK_IEAK_SERVER); wnsprintf(szPlatformLang, countof(szPlatformLang), TEXT("%s%s"), GetOutputPlatformDir(), g_szActLang); SHSetValue(HKEY_CURRENT_USER, szRegKey, g_szBuildRoot, REG_SZ, (LPBYTE)szPlatformLang, (StrLen(szPlatformLang)+1)*sizeof(TCHAR)); } } if (g_fDemo) { TCHAR szMsg[MAX_PATH]; SetCurrentDirectory(g_szBuildRoot); PathRemovePath(g_szBuildTemp); LoadString( g_rvInfo.hInst, IDS_ENDEMO, szMsg, countof(szMsg) ); MessageBox(hDlg, szMsg, g_szTitle, MB_OK | MB_SETFOREGROUND); g_fDone = TRUE; SetEvent(g_hDownloadEvent); } PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_FINISH); g_fCancelled = TRUE; s_fFinished = TRUE; break; case PSN_WIZFINISH: break; case PSN_QUERYCANCEL: if (IsWindowEnabled(GetDlgItem(GetParent(hDlg), IDCANCEL))) QueryCancel(hDlg); break; default: return FALSE; } break; default: return FALSE; } return TRUE; } #define OLDPRSHTSIZE 0x28 #define OLDPPAGESIZE 0x28 #define SSF_ALL SSF_SHOWALLOBJECTS | SSF_SHOWEXTENSIONS | SSF_SHOWCOMPCOLOR | SSF_SHOWSYSFILES | SSF_DESKTOPHTML | SSF_WIN95CLASSIC void FillInPropertyPage(int iPsp, WORD idDlg, DLGPROC pfnDlgProc) { LPPROPSHEETPAGE pPsp; TCHAR szPage[MAX_PATH]; LPDLGTEMPLATE pDlg; if (iPsp < 0 || iPsp > NUM_PAGES) return; if (idDlg == 0) return; if (pfnDlgProc == NULL) return; pDlg = NULL; LoadString(g_rvInfo.hInst, IDS_TITLE, szPage, countof(szPage)); if (iPsp != PPAGE_WELCOME && iPsp != PPAGE_OCWWELCOME && iPsp != PPAGE_FINISH) { TCHAR szStage[MAX_PATH]; if (iPsp < PPAGE_STAGE2) LoadString(g_rvInfo.hInst, IDS_STAGE1, szStage, countof(szStage)); else { if (iPsp < PPAGE_STAGE3) LoadString(g_rvInfo.hInst, IDS_STAGE2, szStage, countof(szStage)); else { if (iPsp < PPAGE_STAGE4) LoadString(g_rvInfo.hInst, IDS_STAGE3, szStage, countof(szStage)); else { if (iPsp < PPAGE_STAGE5) LoadString(g_rvInfo.hInst, IDS_STAGE4, szStage, countof(szStage)); else LoadString(g_rvInfo.hInst, IDS_STAGE5, szStage, countof(szStage)); } } } StrCpy(s_aSzTitle[iPsp], szStage); } else StrCpy(s_aSzTitle[iPsp], szPage); pPsp = &g_psp[iPsp]; ZeroMemory(pPsp, sizeof(PROPSHEETPAGE)); pPsp->dwSize = sizeof(PROPSHEETPAGE); pPsp->dwFlags = PSP_USETITLE | PSP_HASHELP; pPsp->hInstance = g_rvInfo.hInst; pPsp->pfnDlgProc = pfnDlgProc; pPsp->pszTitle = s_aSzTitle[iPsp]; pPsp->pszTemplate = MAKEINTRESOURCE(idDlg); /* if (!IsTahomaFontExist(g_hWndCent)) { pPsp->dwFlags |= PSP_DLGINDIRECT; pPsp->pResource = pDlg; }*/ s_ahPsp[iPsp] = CreatePropertySheetPage(pPsp); } int CreateWizard(HWND hwndOwner) { PROPSHEETHEADER psh; LPTSTR pLastSlash; GetModuleFileName(GetModuleHandle(NULL), g_szWizPath, MAX_PATH); pLastSlash = StrRChr(g_szWizPath, NULL, TEXT('\\')); if (pLastSlash) { pLastSlash[1] = TEXT('\0'); } StrCpy(g_szWizRoot, g_szWizPath); CharUpper(g_szWizRoot); pLastSlash = StrStr(g_szWizRoot, TEXT("IEBIN")); if (pLastSlash) *pLastSlash = TEXT('\0'); LoadString( g_rvInfo.hInst, IDS_TITLE, g_szTitle, countof(g_szTitle) ); ZeroMemory(&psh, sizeof(psh)); if(!g_fOCW) FillInPropertyPage( PPAGE_WELCOME, IDD_WELCOME, Welcome); else FillInPropertyPage( PPAGE_OCWWELCOME, IDD_OCWWELCOME, Welcome); FillInPropertyPage( PPAGE_STAGE1, IDD_STAGE1, Stage); FillInPropertyPage( PPAGE_TARGET, IDD_TARGET, TargetProc); FillInPropertyPage( PPAGE_LANGUAGE, IDD_LANGUAGE, Language); FillInPropertyPage( PPAGE_MEDIA, IDD_MEDIA, MediaDlgProc); FillInPropertyPage( PPAGE_IEAKLITE, IDD_IEAKLITE, IEAKLiteProc); FillInPropertyPage( PPAGE_STAGE2, IDD_STAGE2, Stage); FillInPropertyPage( PPAGE_OPTDOWNLOAD, IDD_OPTDOWNLOAD, OptionalDownload); FillInPropertyPage( PPAGE_CUSTCOMP, IDD_CUSTCOMP4, CustomComponents); FillInPropertyPage( PPAGE_STAGE3, IDD_STAGE3, Stage); FillInPropertyPage( PPAGE_ISKBACK, IDD_ISKBACKBITMAP, ISKBackBitmap); FillInPropertyPage( PPAGE_CDINFO, IDD_CD, CDInfoProc); FillInPropertyPage( PPAGE_SETUPWIZARD, IDD_SETUPWIZARD, ActiveSetupDlgProc); FillInPropertyPage( PPAGE_ICM, IDD_ICM, InternetConnMgr); FillInPropertyPage( PPAGE_COMPSEL, IDD_COMPSEL4, ComponentSelect); FillInPropertyPage( PPAGE_COMPURLS, IDD_COMPURLS, ComponentUrls); FillInPropertyPage( PPAGE_ADDON, IDD_ADDON, AddOnDlgProc); FillInPropertyPage( PPAGE_CORPCUSTOM, IDD_CORPCUSTOM, CorpCustomizeCustom); FillInPropertyPage( PPAGE_CUSTOMCUSTOM, IDD_CUSTOMCUSTOM, CustomizeCustom); FillInPropertyPage( PPAGE_COPYCOMP, IDD_COPYCOMP, CopyComp); FillInPropertyPage( PPAGE_CABSIGN, IDD_CABSIGN, CabSignDlgProc); FillInPropertyPage( PPAGE_STAGE4, IDD_STAGE4, Stage); FillInPropertyPage( PPAGE_OCWSTAGE2, IDD_OCWSTAGE2, Stage); FillInPropertyPage( PPAGE_INSTALLDIR, IDD_INSTALLDIR, InstallDirectory); FillInPropertyPage( PPAGE_SILENTINSTALL, IDD_SILENTINSTALL, SilentInstall); FillInPropertyPage( PPAGE_TITLE, IDD_BTITLE, BrandTitle); FillInPropertyPage( PPAGE_BTOOLBARS, IDD_BTOOLBARS, BToolbarProc); FillInPropertyPage( PPAGE_CUSTICON, IDD_CUSTICON, CustIcon); FillInPropertyPage( PPAGE_STARTSEARCH, IDD_STARTSEARCH, StartSearch); FillInPropertyPage( PPAGE_FAVORITES, IDD_FAVORITES, Favorites); FillInPropertyPage( PPAGE_WELCOMEMSGS, IDD_WELCOMEMSGS, WelcomeMessageDlgProc); FillInPropertyPage( PPAGE_UASTRDLG, IDD_UASTRDLG, UserAgentString); FillInPropertyPage( PPAGE_QUERYAUTOCONFIG, IDD_QUERYAUTOCONFIG, QueryAutoConfigDlgProc); FillInPropertyPage( PPAGE_PROXY, IDD_PROXY, ProxySettings); FillInPropertyPage( PPAGE_CONNECTSET, IDD_CONNECTSET, ConnectSetDlgProc); FillInPropertyPage( PPAGE_QUERYSIGNUP, IDD_QUERYSIGNUP, QuerySignupDlgProc); FillInPropertyPage( PPAGE_SIGNUPFILES, IDD_SIGNUPFILES, SignupFilesDlgProc); FillInPropertyPage( PPAGE_SERVERISPS, IDD_SERVERISPS, ServerIspsDlgProc); FillInPropertyPage( PPAGE_ISPINS, IDD_SIGNUPINS, SignupInsDlgProc); FillInPropertyPage( PPAGE_ICW, IDD_ICW, NewICWDlgProc); FillInPropertyPage( PPAGE_ADDROOT, IDD_ADDROOT, ISPAddRootCertDlgProc); FillInPropertyPage( PPAGE_SECURITYCERT, IDD_SECURITYCERT, SecurityCertsDlgProc); FillInPropertyPage( PPAGE_SECURITY, IDD_SECURITY1, SecurityZonesDlgProc); FillInPropertyPage( PPAGE_STAGE5, IDD_STAGE5, Stage); FillInPropertyPage( PPAGE_PROGRAMS, IDD_PROGRAMS, ProgramsDlgProc); FillInPropertyPage( PPAGE_MAIL, IDD_MAIL, MailServer); FillInPropertyPage( PPAGE_IMAP, IDD_IMAP, IMAPSettings); FillInPropertyPage( PPAGE_PRECONFIG,IDD_PRECONFIG,PreConfigSettings); FillInPropertyPage( PPAGE_OEVIEW,IDD_OEVIEW,ViewSettings); FillInPropertyPage( PPAGE_LDAP, IDD_LDAP, LDAPServer); FillInPropertyPage( PPAGE_OE, IDD_OE, CustomizeOE); FillInPropertyPage( PPAGE_SIG, IDD_SIG, Signature); FillInPropertyPage( PPAGE_ADMDESC, IDD_ADMDESC, ADMDesc); FillInPropertyPage( PPAGE_ADM, IDD_ADM, ADMParse); FillInPropertyPage( PPAGE_STATUS, IDD_STATUS, Finish); FillInPropertyPage( PPAGE_FINISH, IDD_FINISH, Finish); psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_WIZARD | PSH_NOAPPLYNOW | PSH_USEPAGELANG | PSH_USECALLBACK; psh.hInstance = g_rvInfo.hInst; psh.hwndParent = hwndOwner; psh.pszCaption = TEXT("Review Wizard"); psh.nPages = NUM_PAGES; psh.nStartPage = 0; psh.phpage = s_ahPsp; psh.pfnCallback= &PropSheetProc; INT_PTR iResult = PropertySheet(&psh); /* if (!IsTahomaFontExist(g_hWndCent)) { for (int i = 0; i < NUM_PAGES; i++) { CoTaskMemFree((PVOID)g_psp[i].pResource); g_psp[i].pResource = NULL; } }*/ return (iResult < 0) ? -1 : 1; } BOOL CheckAVS(LPCTSTR pcszDownloadDir) { TCHAR szDownloadDir[MAX_PATH]; TCHAR szCabFile[MAX_PATH]; HANDLE hFind = NULL; WIN32_FIND_DATA fd; static TCHAR s_szLocaleIni[MAX_PATH]; if (ISNULL(s_szLocaleIni)) PathCombine(s_szLocaleIni, g_szWizRoot, TEXT("locale.ini")); PathCombine(szDownloadDir, pcszDownloadDir, TEXT("*.*")); hFind = FindFirstFile(szDownloadDir, &fd); if (hFind != INVALID_HANDLE_VALUE) { do { if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || (StrCmp(fd.cFileName, TEXT(".")) == 0) || (StrCmp(fd.cFileName, TEXT("..")) == 0)) continue; if (!InsIsKeyEmpty(IS_STRINGS, fd.cFileName, s_szLocaleIni)) { PathCombine(szCabFile, pcszDownloadDir, fd.cFileName); PathAppend(szCabFile, TEXT("setupw95.cab")); if (PathFileExists(szCabFile)) { FindClose(hFind); return TRUE; } } } while (FindNextFile(hFind, &fd)); FindClose(hFind); } return FALSE; } INT_PTR CALLBACK AdvancedDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM) { TCHAR szTemp[MAX_PATH]; TCHAR szTempFile[MAX_PATH]; DWORD dwVal; BOOL fLocalMode = TRUE; HANDLE hTemp; DWORD dwFlags; switch (message) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDE_LOADINS); EnableDBCSChars(hDlg, IDE_SOURCEDIR); SetDlgItemText(hDlg, IDE_SOURCEDIR, g_szIEAKProg); CheckDlgButton( hDlg, IDC_OFFLINE, g_fLocalMode ? BST_UNCHECKED : BST_CHECKED ); if (g_fLangInit) DisableDlgItem(hDlg, IDC_OFFLINE); SetDlgItemText(hDlg, IDE_LOADINS, g_szLoadedIns); break; case WM_COMMAND: switch(HIWORD(wParam)) { case BN_CLICKED: switch (LOWORD(wParam)) { case IDC_BROWSE: { TCHAR szInstructions[MAX_PATH]; LoadString(g_rvInfo.hInst,IDS_COMPDLDIR,szInstructions,countof(szInstructions)); if (BrowseForFolder(hDlg, szTemp, szInstructions)) SetDlgItemText(hDlg, IDE_SOURCEDIR, szTemp); } break; case IDC_BROWSEINS: GetDlgItemText( hDlg, IDE_LOADINS, szTemp, countof(szTemp)); if( BrowseForFile( hDlg, szTemp, countof(szTemp), GFN_INS )) SetDlgItemText( hDlg, IDE_LOADINS, szTemp ); break; case IDCANCEL: EndDialog( hDlg, IDCANCEL ); break; case IDOK: dwFlags = FC_FILE | FC_EXISTS; if (!CheckField(hDlg, IDE_LOADINS, dwFlags)) break; GetDlgItemText(hDlg, IDE_SOURCEDIR, szTemp, countof(szTemp)); if (!CheckField(hDlg, IDE_SOURCEDIR, FC_PATH | FC_DIR)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if (!PathIsUNC(szTemp)) { if ((PathIsRoot(szTemp)) || (PathIsRelative(szTemp))) { ErrorMessageBox(hDlg, IDS_SRCNEEDPATH); break; } } if ((StrLen(szTemp) <= 3) || PathIsUNCServer(szTemp)) { ErrorMessageBox(hDlg, IDS_SRCROOTILLEGAL); break;; } fLocalMode = !IsDlgButtonChecked( hDlg, IDC_OFFLINE ); if (!g_fBatch && fLocalMode && !CheckAVS(szTemp)) { ErrorMessageBox(hDlg, IDS_NEEDAVS); break; } PathCombine(szTempFile, szTemp, TEXT("~~!!foo.txt")); if (!PathCreatePath(szTemp) || ((hTemp = CreateFile(szTempFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)) { TCHAR szMsg[128]; TCHAR szMsgTemp[MAX_PATH+128]; LoadString(g_rvInfo.hInst, IDS_BADDIR, szMsg, countof(szMsg)); wnsprintf(szMsgTemp, countof(szMsgTemp), szMsg, szTemp); MessageBox(hDlg, szMsgTemp, g_szTitle, MB_OK | MB_SETFOREGROUND); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } CloseHandle(hTemp); DeleteFile(szTempFile); PathAddBackslash(szTemp); StrCpy(g_szIEAKProg, szTemp); GetDlgItemText(hDlg, IDE_LOADINS, g_szLoadedIns, countof(g_szLoadedIns)); if (ISNONNULL(g_szLoadedIns)) { int nPlatformId = 0; InsGetString(IS_BRANDING, TEXT("Platform"), szTemp, countof(szTemp), g_szLoadedIns); nPlatformId = StrToInt(szTemp); if (nPlatformId != 0 && nPlatformId != PLATFORM_WIN32 && nPlatformId != PLATFORM_W2K) { TCHAR szMsgParam[128]; TCHAR szMsg[MAX_PATH+128]; LoadString(g_rvInfo.hInst, IDS_UNSUPPORTED_PLATFORM, szMsgParam, countof(szMsgParam)); wnsprintf(szMsg, countof(szMsg), szMsgParam, g_szLoadedIns); MessageBox(hDlg, szMsg, g_szTitle, MB_ICONINFORMATION | MB_OK); *g_szLoadedIns = TEXT('\0'); SetFocus(GetDlgItem(hDlg, IDE_LOADINS)); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } else if (nPlatformId == 0) nPlatformId = PLATFORM_WIN32; } s_fLoadIns = TRUE; g_fLocalMode = fLocalMode; dwVal = g_fLocalMode ? 0 : 1; switch (g_dwPlatformId) { case PLATFORM_WIN32: default: SHSetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("WIN32_AVS"), REG_DWORD, (LPBYTE)&dwVal, sizeof(dwVal)); break; } EndDialog( hDlg, IDOK ); break; } break; } break; default: return FALSE; } return TRUE; } // // FUNCTION: TargetProc(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for "OCW Source Target" page // // MESSAGES: // // WM_INITDIALOG - intializes the page // WM_NOTIFY - processes the notifications sent to the page // INT_PTR CALLBACK TargetProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR szMsg[MAX_PATH]; TCHAR szTemp[MAX_PATH+128]; TCHAR szTempFile[MAX_PATH]; TCHAR szDeskDir[MAX_PATH]; TCHAR szRealRoot[MAX_PATH]; TCHAR szDestRoot[MAX_PATH]; TCHAR szTempRoot[MAX_PATH]; DWORD dwDestFree, dwDestNeed; DWORD dwSRet, dwAttrib = 0xFFFFFFFF; BOOL fNext = FALSE; HANDLE hTemp; static BOOL s_fFirst = TRUE; switch (message) { case WM_INITDIALOG: g_hWizard = hDlg; EnableDBCSChars(hDlg, IDE_TARGETDIR); break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_COMMAND: if( HIWORD(wParam) == BN_CLICKED ) { switch (LOWORD(wParam)) { case IDC_BROWSE2: { TCHAR szInstructions[MAX_PATH]; LoadString(g_rvInfo.hInst,IDS_TARGETDIR,szInstructions,countof(szInstructions)); if (BrowseForFolder(hDlg, szTemp,szInstructions)) SetDlgItemText(hDlg, IDE_TARGETDIR, szTemp); } break; case IDC_ADVANCED: DialogBox( g_rvInfo.hInst, (LPTSTR) IDD_ADVANCEDPOPUP, hDlg, AdvancedDlgProc); break; } } break; case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); //file locs dwSRet = countof(g_szBuildRoot); if(!g_fBatch && !g_fBatch2) { if (ISNULL(s_szSourceDir)) { DWORD dwSize = sizeof(g_szIEAKProg); SHGetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("SourceDir"), NULL, (LPBYTE)s_szSourceDir, &dwSize); if (ISNULL(s_szSourceDir)) { GetIEAKDir(s_szSourceDir); PathAppend(s_szSourceDir, TEXT("Download")); } } StrCpy(g_szIEAKProg, s_szSourceDir); PathAddBackslash(s_szSourceDir); s_fAppendLang = TRUE; } if (s_fFirst) { DWORD dwSize, dwVal; s_fFirst = FALSE; dwSize = sizeof(dwVal); switch (g_dwPlatformId) { case PLATFORM_WIN32: default: if ((SHGetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("WIN32_AVS"), NULL, (LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS) && !dwVal) g_fLocalMode = TRUE; break; } } if (ISNONNULL(g_szIEAKProg)) PathRemoveBackslash(g_szIEAKProg); if (!g_fOCW) { if (!g_fBatch && !g_fBatch2) { DWORD dwSize = sizeof(g_szBuildRoot); SHGetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("DestPath"), NULL, (LPVOID)g_szBuildRoot, &dwSize); } } if (ISNONNULL(g_szBuildRoot)) PathRemoveBackslash(g_szBuildRoot); else { SYSTEMTIME SystemTime; TCHAR szDate[MAX_PATH]; TCHAR szDefaultTarget[MAX_PATH]; GetLocalTime(&SystemTime); wnsprintf(szDate, countof(szDate), TEXT("%02d%02d%d"), SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear); LoadString(g_rvInfo.hInst, IDS_DEFAULT_TARGETDIR, szDefaultTarget, countof(szDefaultTarget)); wnsprintf(g_szBuildRoot, countof(g_szBuildRoot), szDefaultTarget, szDate); } SetDlgItemText(hDlg, IDE_TARGETDIR, g_szBuildRoot); CheckBatchAdvance(hDlg); break; case PSN_WIZNEXT: fNext = TRUE; case PSN_WIZBACK: //file locs if (!g_fBatch && g_fLocalMode && !CheckAVS(g_szIEAKProg)) { ErrorMessageBox(hDlg, IDS_NEEDAVS2); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } StrCpy(szTemp, g_szBuildRoot); GetDlgItemText(hDlg, IDE_TARGETDIR, g_szBuildRoot, countof(g_szBuildRoot)); StrTrim(g_szBuildRoot, TEXT(" \t")); if (!PathIsUNC(g_szBuildRoot)) { if ((PathIsRoot(g_szBuildRoot)) || (PathIsRelative(g_szBuildRoot))) { ErrorMessageBox(hDlg, IDS_NEEDPATH); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } } if ((StrLen(g_szBuildRoot) <= 3) || PathIsUNCServer(g_szBuildRoot)) { ErrorMessageBox(hDlg, IDS_ROOTILLEGAL); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if (!CheckField(hDlg, IDE_TARGETDIR, FC_PATH | FC_DIR)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if (ISNONNULL(g_szBuildRoot)) PathRemoveBackslash(g_szBuildRoot); PathRemoveBackslash(g_szIEAKProg); if (StrCmpI(g_szBuildRoot, g_szIEAKProg) == 0) { LoadString(g_rvInfo.hInst, IDS_SAMEDIR, szMsg, countof(szMsg)); MessageBox(hDlg, szMsg, g_szTitle, MB_OK | MB_SETFOREGROUND); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } StrCpy(szRealRoot, g_szBuildRoot); hTemp = NULL; PathCombine(szTempFile, g_szIEAKProg, TEXT("~~!!foo.txt")); if (!PathCreatePath(g_szIEAKProg) || ((hTemp = CreateFile(szTempFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)) { LoadString(g_rvInfo.hInst, IDS_BADDIR2, szMsg, countof(szMsg)); wnsprintf(szTemp, countof(szTemp), szMsg, g_szIEAKProg); MessageBox(hDlg, szTemp, g_szTitle, MB_OK | MB_SETFOREGROUND); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if (hTemp != INVALID_HANDLE_VALUE) CloseHandle(hTemp); DeleteFile(szTempFile); PathAddBackslash(g_szIEAKProg); hTemp = NULL; PathCombine(szTempFile, g_szBuildRoot, TEXT("~~!!foo.txt")); if (!PathCreatePath(g_szBuildRoot) || (hTemp = CreateFile(szTempFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { LoadString(g_rvInfo.hInst, IDS_BADDIR, szMsg, countof(szMsg)); wnsprintf(szTemp, countof(szTemp), szMsg, g_szBuildRoot); MessageBox(hDlg, szTemp, g_szTitle, MB_OK | MB_SETFOREGROUND); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; } if (hTemp != INVALID_HANDLE_VALUE) CloseHandle(hTemp); DeleteFile(szTempFile); PathCombine(szDeskDir, g_szBuildRoot, TEXT("Desktop")); if ((dwAttrib = GetFileAttributes(szDeskDir)) != 0xFFFFFFFF) SetFileAttributes(szDeskDir, dwAttrib & ~FILE_ATTRIBUTE_HIDDEN); if (!g_fBatch) SHSetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("DestPath"), REG_SZ, (LPBYTE)szRealRoot, (StrLen(szRealRoot)+1)*sizeof(TCHAR)); GetTempPath(MAX_PATH, g_szBuildTemp); PathAppend(g_szBuildTemp, TEXT("IEDKTEMP")); PathRemovePath(g_szBuildTemp); PathCreatePath(g_szBuildTemp); PathCombine(g_szTempSign, g_szBuildTemp, TEXT("CUSTSIGN")); PathCreatePath(g_szTempSign); // BUGBUG: (andrewgu) no man's land starts... StrCpy(szDestRoot, g_szBuildRoot); StrCpy(szTempRoot, g_szBuildTemp); CharUpper(szDestRoot); CharUpper(szTempRoot); dwDestFree = GetRootFree(szDestRoot); dwDestNeed = MIN_PACKAGE_SIZE; if (fNext) { if (dwDestFree < dwDestNeed) { TCHAR szTitle[MAX_PATH]; TCHAR szTemplate[MAX_PATH]; TCHAR szMsg[MAX_PATH]; LoadString( g_rvInfo.hInst, IDS_DISKERROR, szTitle, MAX_PATH ); LoadString( g_rvInfo.hInst, IDS_DESTDISKMSG, szTemplate, MAX_PATH ); wnsprintf(szMsg, countof(szMsg), szTemplate, dwDestFree, dwDestNeed); if (MessageBox(hDlg, szMsg, szTitle, MB_OKCANCEL | MB_SETFOREGROUND) == IDCANCEL) { LoadString( g_rvInfo.hInst, IDS_ERROREXIT, szMsg, countof(szMsg) ); MessageBox(hDlg, szMsg, szTitle, MB_OK | MB_SETFOREGROUND); DoCancel(); } SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); return TRUE; } } if(!g_fBatch && !g_fBatch2) { if (StrCmpI(s_szSourceDir, g_szIEAKProg) != 0) { SHSetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("SourceDir"), REG_SZ, (LPBYTE)g_szIEAKProg, (lstrlen(g_szIEAKProg)+1)*sizeof(TCHAR)); g_fSrcDirChanged = TRUE; s_fAppendLang = TRUE; StrCpy(s_szSourceDir, g_szIEAKProg); } if (StrCmpI(szTemp, g_szBuildRoot)) s_fDestDirChanged = TRUE; } g_iCurPage = PPAGE_TARGET; EnablePages(); if (fNext) PageNext(hDlg); else PagePrev(hDlg); break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; default: return FALSE; } return TRUE; } void InitIEAKLite(HWND hwndList) { ListView_DeleteAllItems(hwndList); for (int i = 0, iItem = 0; i < IL_END; i++) { TCHAR szGroupName[MAX_PATH]; LVITEM lvItem; // do not show groups that are not relevant for the current role (ICP, ISP, or Corp) // recap: // ICP is (!g_fBranded) // ISP is (g_fBranded && !g_fIntranet) // CORP is (g_fIntranet) if ((!g_fBranded && g_IEAKLiteArray[i].fICP == FALSE) || ( g_fBranded && !g_fIntranet && g_IEAKLiteArray[i].fISP == FALSE) || ( g_fIntranet && g_IEAKLiteArray[i].fCorp == FALSE)) { g_IEAKLiteArray[i].iListBox = -2; g_IEAKLiteArray[i].fEnabled = TRUE; continue; } // do not show ICM group in IEAKLite if only doing single disk branding since it's // not available anyway if (i == IL_ICM) { if (g_fBrandingOnly && !g_fDownload && !g_fCD && !g_fLAN) { g_IEAKLiteArray[i].iListBox = -2; g_IEAKLiteArray[i].fEnabled = TRUE; continue; } } // if adms haven't been deleted yet, show adm page // by not creating an entry in the IEAKLite box if (i == IL_ADM) { if (InsGetBool(IS_BRANDING, TEXT("DeleteAdms"), FALSE, g_szCustIns)) { g_IEAKLiteArray[i].iListBox = -2; g_IEAKLiteArray[i].fEnabled = TRUE; continue; } } // BUGBUG: pritobla: should have separate flags similar to DeleteAdms for activesetup // and icm so that even if the user cancels out of wizard before reaching these // pages, we can force them again. // Should consider this while reworking ieaklite. // force active setup, CMAK and adms to show up if imported an ins // by not creating an entry in the IEAKLite box if (*g_szLoadedIns) { if (i == IL_ACTIVESETUP || i == IL_ICM || i == IL_ADM) { g_IEAKLiteArray[i].iListBox = -2; g_IEAKLiteArray[i].fEnabled = TRUE; continue; } } LoadString(g_rvInfo.hInst, g_IEAKLiteArray[i].idGroupName, szGroupName, countof(szGroupName)); g_IEAKLiteArray[i].fEnabled = !InsGetBool(IS_IEAKLITE, szGroupName, FALSE, g_szCustIns); ZeroMemory(&lvItem, sizeof(lvItem)); lvItem.mask = LVIF_TEXT | LVIF_IMAGE; lvItem.iItem = iItem++; lvItem.pszText = szGroupName; lvItem.iImage = g_IEAKLiteArray[i].fEnabled ? 1 : 0; #ifdef _DEBUG { LVFINDINFO lvFind; ZeroMemory(&lvFind, sizeof(lvFind)); lvFind.flags = LVFI_STRING; lvFind.psz = szGroupName; ASSERT(ListView_FindItem(hwndList, -1, &lvFind) == -1); } #endif g_IEAKLiteArray[i].iListBox = ListView_InsertItem(hwndList, &lvItem); } ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE); } void IEAKLiteMaintToggleCheckItem(HWND hwndList, int iItem) { int i; LVITEM lvItem; for (i = 0; i < IL_END; i++) { if (g_IEAKLiteArray[i].iListBox == iItem) break; } ZeroMemory(&lvItem, sizeof(lvItem)); g_IEAKLiteArray[i].fEnabled = !(g_IEAKLiteArray[i].fEnabled); lvItem.iItem = iItem; lvItem.mask = LVIF_IMAGE; lvItem.iImage = g_IEAKLiteArray[i].fEnabled ? 1 : 0; ListView_SetItem(hwndList, &lvItem); } BOOL ExtractOldInfo(LPCTSTR pcszCabname, LPTSTR pcszDestDir, BOOL fExe) { TCHAR szCabPath[MAX_PATH]; TCHAR szCmd[MAX_PATH*3]; StrCpy(szCabPath, g_szCustIns); PathRemoveFileSpec(szCabPath); PathAppend(szCabPath, pcszCabname); if (!PathFileExists(szCabPath)) return TRUE; if (!fExe) return (ExtractFilesWrap(szCabPath, pcszDestDir, 0, NULL, NULL, 0) == ERROR_SUCCESS); wnsprintf(szCmd, countof(szCmd), TEXT("\"%s\" /c /t:\"%s\""), szCabPath, pcszDestDir); return (RunAndWait(szCmd, g_szBuildTemp, SW_HIDE) == S_OK); } // BUGBUG: should probably persist this server side only info in a server side file for IEAK6 DWORD SaveIEAKLiteThreadProc(LPVOID) { static BOOL s_fDesk; static BOOL s_fBrand; static BOOL s_fExe; TCHAR szGroupName[128]; TCHAR szTmp[MAX_PATH]; if (s_fDestDirChanged) s_fDestDirChanged = s_fDesk = s_fBrand = s_fExe = FALSE; for (int i=0; i < IL_END; i++) { LoadString(g_rvInfo.hInst, g_IEAKLiteArray[i].idGroupName, szGroupName, countof(szGroupName)); WritePrivateProfileString(IS_IEAKLITE, szGroupName, g_IEAKLiteArray[i].fEnabled ? NULL : TEXT("1"), g_szCustIns); } if (!s_fExe && !g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled) { ExtractOldInfo(TEXT("IE6SETUP.EXE"), g_szBuildTemp, TRUE); s_fExe = TRUE; } if (!s_fBrand && (!g_IEAKLiteArray[IL_BROWSER].fEnabled || !g_IEAKLiteArray[IL_SIGNUP].fEnabled || !g_IEAKLiteArray[IL_CONNECT].fEnabled || !g_IEAKLiteArray[IL_ZONES].fEnabled || !g_IEAKLiteArray[IL_CERT].fEnabled || !g_IEAKLiteArray[IL_MAILNEWS].fEnabled || !g_IEAKLiteArray[IL_ADM].fEnabled || IsIconsInFavs(IS_FAVORITESEX, g_szCustIns) || IsIconsInFavs(IS_URL, g_szCustIns))) { ExtractOldInfo(TEXT("BRANDING.CAB"), g_szTempSign, FALSE); PathCombine(szTmp, g_szTempSign, TEXT("install.inf")); DeleteFile(szTmp); PathCombine(szTmp, g_szTempSign, TEXT("setup.inf")); DeleteFile(szTmp); s_fBrand = TRUE; } if (ISNULL(g_szDeskTemp) && g_fIntranet) { PathCombine(g_szDeskTemp, g_szBuildRoot, TEXT("DESKTOP")); PathCreatePath(g_szDeskTemp); } if (!s_fDesk) { ExtractOldInfo(TEXT("DESKTOP.CAB"), g_szDeskTemp, FALSE); PathCombine(szTmp, g_szDeskTemp, TEXT("install.inf")); DeleteFile(szTmp); PathCombine(szTmp, g_szDeskTemp, TEXT("setup.inf")); DeleteFile(szTmp); s_fDesk = TRUE; } if (!g_fIntranet && g_fBranded) { // ISP g_fServerICW = g_fServerKiosk = g_fServerless = g_fNoSignup = FALSE; // make sure that only one of the variables is set to TRUE g_fServerICW = InsGetBool(IS_BRANDING, IK_USEICW, 0, g_szCustIns); if (!g_fServerICW) { g_fServerKiosk = InsGetBool(IS_BRANDING, IK_SERVERKIOSK, 0, g_szCustIns); if (!g_fServerKiosk) { g_fServerless = InsGetBool(IS_BRANDING, IK_SERVERLESS, 0, g_szCustIns); if (!g_fServerless) { // in lots of other functions like BuildIE4, BuildBrandingOnly, BuildCDandMflop, etc., // !g_fNoSignup is used to mean that some signup mode was chosen; // therefore, default to TRUE for g_fNoSignup g_fNoSignup = InsGetBool(IS_BRANDING, IK_NODIAL, 1, g_szCustIns); } } } } else { if (g_fIntranet) { // Corp g_fSilent = GetPrivateProfileInt( BRANDING, SILENT_INSTALL, 0, g_szCustIns ); g_fStealth = GetPrivateProfileInt( BRANDING, TEXT("StealthInstall"), 0, g_szCustIns ); g_fInteg = GetPrivateProfileInt( BRANDING, WEB_INTEGRATED, 0, g_szCustIns ); } } g_fUseIEWelcomePage = !InsGetBool(IS_URL, IK_NO_WELCOME_URL, FALSE, g_szCustIns); // take care of install dir for corp case if (g_fIntranet) { TCHAR szWrk[MAX_PATH]; GetPrivateProfileString( IS_BRANDING, TEXT("InstallDir"), TEXT(""), szWrk, countof(szWrk), g_szCustIns ); if (*szWrk != TEXT('%')) { g_iInstallOpt = INSTALL_OPT_FULL; if (ISNONNULL(szWrk)) StrCpy(g_szInstallFolder, szWrk); else { LoadString( g_rvInfo.hInst, IDS_IE, g_szInstallFolder, MAX_PATH ); g_iInstallOpt = INSTALL_OPT_PROG; } } else { switch (szWrk[1]) { case 'p': case 'P': default: g_iInstallOpt = INSTALL_OPT_PROG; break; } StrCpy(g_szInstallFolder, &szWrk[3]); } } return 0; } void SetIEAKLiteDesc(HWND hDlg, int iItem) { WORD wId; int i; TCHAR szDesc[512]; for (i = 0; i < IL_END; i++) { if (g_IEAKLiteArray[i].iListBox == iItem) break; } if (!g_fBranded) wId = g_IEAKLiteArray[i].idICPDesc; else { if (!g_fIntranet) wId = g_IEAKLiteArray[i].idISPDesc; else wId = g_IEAKLiteArray[i].idCorpDesc; } LoadString(g_rvInfo.hInst, wId, szDesc, countof(szDesc)); SetDlgItemText(hDlg, IDC_IEAKLITEDESC, szDesc); } void IEAKLiteSelectAll(HWND hCompList, BOOL fSet) { for (int i=0; i < IL_END; i++) { if (g_IEAKLiteArray[i].iListBox != -2) { LV_ITEM lvItem; g_IEAKLiteArray[i].fEnabled = fSet; ZeroMemory(&lvItem, sizeof(lvItem)); lvItem.iImage = fSet ? 1 : 0; lvItem.mask = LVIF_IMAGE; lvItem.iItem = g_IEAKLiteArray[i].iListBox; ListView_SetItem(hCompList, &lvItem); } } } // // FUNCTION: IEAKLiteProc(HWND, UINT, UINT, LONG) // // PURPOSE: Processes messages for "IEAKLite" page // // MESSAGES: // // WM_INITDIALOG - intializes the page // WM_NOTIFY - processes the notifications sent to the page // INT_PTR CALLBACK IEAKLiteProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { HWND hwndList = GetDlgItem(hDlg, IDC_IEAKLITE); HWND hWait; HANDLE hThread; int iItem; DWORD dwTid; switch (message) { case WM_INITDIALOG: EnableDBCSChars(hDlg, IDC_IEAKLITE); InitList(hDlg, IDC_IEAKLITE); g_hWizard = hDlg; break; case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case IDM_BATCHADVANCE: DoBatchAdvance(hDlg); break; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { switch (LOWORD(wParam)) { case IDC_LITECHECKALL: IEAKLiteSelectAll(hwndList, TRUE); break; case IDC_LITEUNCHECKALL: IEAKLiteSelectAll(hwndList, FALSE); break; } } break; case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { case LVN_KEYDOWN: { NMLVKEYDOWN *pnm = (NMLVKEYDOWN*) lParam; if ( pnm->wVKey == VK_SPACE ) { iItem = ListView_GetSelectionMark(hwndList); IEAKLiteMaintToggleCheckItem(hwndList, iItem); } break; } case NM_CLICK: { POINT pointScreen, pointLVClient; DWORD dwPos; LVHITTESTINFO HitTest; dwPos = GetMessagePos(); pointScreen.x = LOWORD (dwPos); pointScreen.y = HIWORD (dwPos); pointLVClient = pointScreen; // Convert the point from screen to client coordinates, // relative to the Listview ScreenToClient (hwndList, &pointLVClient); HitTest.pt = pointLVClient; ListView_HitTest(hwndList, &HitTest); // Only if the user clicked on the checkbox icon/bitmap, change if (HitTest.flags == LVHT_ONITEMICON) IEAKLiteMaintToggleCheckItem(hwndList, HitTest.iItem); SetIEAKLiteDesc(hDlg, HitTest.iItem); } break; case NM_DBLCLK: if ( ((LPNMHDR)lParam)->idFrom == IDC_IEAKLITE) { iItem = ListView_GetSelectionMark(hwndList); IEAKLiteMaintToggleCheckItem(hwndList, iItem); SetIEAKLiteDesc(hDlg, iItem); } break; case LVN_ITEMCHANGED: iItem = ListView_GetSelectionMark(hwndList); SetIEAKLiteDesc(hDlg, iItem); break; case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break; case PSN_SETACTIVE: SetBannerText(hDlg); InitIEAKLite(GetDlgItem(hDlg, IDC_IEAKLITE)); ListView_SetItemState(hwndList, 0, LVIS_SELECTED, LVIS_SELECTED); SetIEAKLiteDesc(hDlg, 0); CheckBatchAdvance(hDlg); break; case PSN_WIZNEXT: case PSN_WIZBACK: PropSheet_SetWizButtons(GetParent(hDlg), 0); hWait = CreateDialog(g_rvInfo.hInst, MAKEINTRESOURCE(IDD_WAITIEAKLITE), hDlg, DownloadStatusDlgProc); ShowWindow( hWait, SW_SHOWNORMAL ); hThread = CreateThread(NULL, 4096, SaveIEAKLiteThreadProc, NULL, 0, &dwTid); while (MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0) { MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } if (hThread) CloseHandle(hThread); DestroyWindow(hWait); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); g_iCurPage = PPAGE_IEAKLITE; EnablePages(); if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else { PagePrev(hDlg); } break; case PSN_QUERYCANCEL: QueryCancel(hDlg); break; default: return FALSE; } break; case WM_LV_GETITEMS: LVGetItems(GetDlgItem(hDlg, IDC_IEAKLITE)); break; default: return FALSE; } return TRUE; } void PositionWindow(HWND hWnd) { int nXPos, nYPos, nWidth, nHeight; RECT rectWnd, rectDesktop; if (hWnd == NULL && !IsWindow(hWnd)) return; GetWindowRect(GetDesktopWindow(), &rectDesktop); GetWindowRect(hWnd, &rectWnd); nXPos = nYPos = -1; nWidth = rectWnd.right - rectWnd.left; nHeight = rectWnd.bottom - rectWnd.top; if (g_fOCW && *g_szParentWindowName) { HWND hOCWWnd; RECT rect; hOCWWnd = FindWindow(NULL, g_szParentWindowName); if (hOCWWnd != NULL && IsWindow(hOCWWnd) && !IsIconic(hOCWWnd)) { GetWindowRect(hOCWWnd, &rect); nXPos = rect.left; nYPos = rect.top; } } if (nXPos == -1 && nYPos == -1) { nXPos = (rectDesktop.right - nWidth) / 2; nYPos = (rectDesktop.bottom - nHeight) / 2; } MoveWindow(hWnd, nXPos, nYPos, nWidth, nHeight, TRUE); } void GetIEAKDir(LPTSTR szDir) { TCHAR szIEAKDir[MAX_PATH]; *szIEAKDir = TEXT('\0'); if (GetModuleFileName(NULL, szIEAKDir, countof(szIEAKDir))) PathRemoveFileSpec(szIEAKDir); else { DWORD dwSize; dwSize = sizeof(szIEAKDir); if (SHGetValue(HKEY_LOCAL_MACHINE, REGSTR_PATH_APPPATHS TEXT("\\ieak6WIZ.EXE"), TEXT("Path"), NULL, (LPVOID) szIEAKDir, &dwSize) != ERROR_SUCCESS) { dwSize = sizeof(szIEAKDir); if (SHGetValue(HKEY_LOCAL_MACHINE, REGSTR_PATH_SETUP, TEXT("ProgramFilesDir"), NULL, (LPVOID) szIEAKDir, &dwSize) == ERROR_SUCCESS) PathAppend(szIEAKDir, TEXT("IEAK")); } } StrCpy(szDir, szIEAKDir); } // get the ins file from the selected "platform/language" directory if exists // else copy the last ins file used for this build directory if one exists // else start with a new ins file void GenerateCustomIns() { TCHAR szSrcCustIns[MAX_PATH]; PathCombine(g_szCustIns, g_szBuildRoot, TEXT("INS")); PathAppend(g_szCustIns, GetOutputPlatformDir()); PathAppend(g_szCustIns, g_szLanguage); PathCreatePath(g_szCustIns); PathAppend(g_szCustIns, TEXT("INSTALL.INS")); if (g_szSrcRoot[0]) { PathCombine(szSrcCustIns, g_szSrcRoot, TEXT("INS")); PathAppend(szSrcCustIns, GetOutputPlatformDir()); PathAppend(szSrcCustIns, g_szLanguage); PathCreatePath(szSrcCustIns); PathAppend(szSrcCustIns, TEXT("INSTALL.INS")); } if (PathFileExists(szSrcCustIns)) CopyFile(szSrcCustIns, g_szCustIns, FALSE); //Overwrite if already exists if (!PathFileExists(g_szCustIns)) { TCHAR szInsFile[MAX_PATH]; TCHAR szPlatformLang[MAX_PATH]; DWORD dwSize = sizeof(szPlatformLang); TCHAR szRegKey[MAX_PATH]; wnsprintf(szRegKey, countof(szRegKey), TEXT("%s\\INS"), RK_IEAK_SERVER); if (SHGetValue(HKEY_CURRENT_USER, szRegKey, g_szBuildRoot, NULL, (LPBYTE)szPlatformLang, &dwSize) == ERROR_SUCCESS) { TCHAR szTemp[MAX_PATH]; StrCpy(szTemp, szPlatformLang); PathRemoveFileSpec(szTemp); if (StrCmpI(szTemp, TEXT("WIN32")) == 0) { PathCombine(szInsFile, g_szBuildRoot, TEXT("INS")); PathAppend(szInsFile, szPlatformLang); PathAppend(szInsFile, TEXT("INSTALL.INS")); CopyFile(szInsFile, g_szCustIns, TRUE); if (ISNULL(g_szLoadedIns) && (StrCmpI(g_szLoadedIns, szInsFile) != 0)) { StrCpy(g_szLoadedIns, szInsFile); s_fLoadIns = TRUE; } } } } }