|
|
#include "precomp.h"
#define MSGR_MAX_URL MAX_PATH
#define MSGR_MAX_BRAND 65
#define MSGR_MAX_SHORTBRAND 33
extern PROPSHEETPAGE g_psp[NUM_PAGES]; extern TCHAR g_szBuildRoot[MAX_PATH]; extern TCHAR g_szLanguage[]; extern TCHAR g_szCustIns[MAX_PATH]; extern TCHAR g_szTempSign[]; extern int g_iCurPage;
TCHAR g_szMsgrIns[MAX_PATH] = TEXT(""); static TCHAR g_szMsgrPath[MAX_PATH] = TEXT("");
static const TCHAR c_szEmpty[] = TEXT("");
const TCHAR szHttpPrefix[] = TEXT("http://");
const TCHAR g_szMSNBrand[] = TEXT("MSN Messenger Service"); const TCHAR g_szHotmailDomain[] = TEXT("hotmail.com"); const TCHAR g_szPassportDomain[] = TEXT("passport.com");
BOOL RewriteMsgrInfWithBrand(LPTSTR lpszINF);
INT_PTR CALLBACK MessengerDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR szBrand[MSGR_MAX_SHORTBRAND]; TCHAR szDownload[MSGR_MAX_URL]; TCHAR szProvider[MSGR_MAX_SHORTBRAND];
UNREFERENCED_PARAMETER(wParam);
switch (message) { case WM_INITDIALOG: //----- Set up the global goo -----
g_hWizard = hDlg;
//----- Set up dialog controls -----
EnableDBCSChars(hDlg, IDE_MSGRBRAND); EnableDBCSChars(hDlg, IDE_MSGRDOWNLOAD);
Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRBRAND), MSGR_MAX_SHORTBRAND - 1); Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRBRAND2), MSGR_MAX_SHORTBRAND - 1); Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRDOWNLOAD), countof(szDownload)-1);
// Simulate click on first radio button to gray out appropriate controls
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BRAND1, BN_CLICKED), NULL); CheckRadioButton(hDlg, IDC_BRAND1, IDC_BRAND2, IDC_BRAND1);
if (TEXT('\0') == g_szMsgrIns[0]) { // Set up MSGR path and IN_ file
StrCpy(g_szMsgrPath, g_szCustIns); PathRemoveFileSpec(g_szMsgrPath); PathCreatePath(g_szMsgrPath);
PathCombine(g_szMsgrIns, g_szMsgrPath, TEXT("MSMSGS.IN_")); // First 7 chars of customization key written to this IN_ later.
}
break;
case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break;
case WM_NOTIFY: switch (((NMHDR FAR *)lParam)->code) { case PSN_SETACTIVE: //----- Standard prolog -----
// Note. Another case of the global goo.
SetBannerText(hDlg);
//----- Initialization of fields -----
SHGetIniString(IS_MESSENGER, IK_PROVIDERNAME, szProvider, countof(szProvider), g_szMsgrIns); SHGetIniString(IS_MESSENGER, IK_SHORTNAME, szBrand, countof(szBrand), g_szMsgrIns);
StrRemoveWhitespace(szBrand); StrRemoveWhitespace(szProvider);
if (*szProvider) { // Use Option 1--set the provider name
SetDlgItemText(hDlg, IDE_MSGRBRAND, szProvider); } else if (*szBrand) { // Use Option 2--set the brand name
SetDlgItemText(hDlg, IDE_MSGRBRAND2, szBrand);
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BRAND2, BN_CLICKED), NULL); CheckRadioButton(hDlg, IDC_BRAND1, IDC_BRAND2, IDC_BRAND2); }
GetPrivateProfileString(IS_MESSENGER, IK_DOWNLOAD, c_szEmpty, szDownload, countof(szDownload), g_szMsgrIns);
StrRemoveWhitespace(szDownload);
SetDlgItemText(hDlg, IDE_MSGRDOWNLOAD, szDownload); CheckBatchAdvance(hDlg); // standard line
break;
case PSN_WIZBACK: case PSN_WIZNEXT: case PSN_WIZFINISH: if (!CheckField(hDlg, IDE_MSGRDOWNLOAD, FC_URL)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; }
//----- Read data from controls into internal variables -----
// The brand name is written via SHSetIniString to UTF7 encode Unicode. This is the only
// parameter for which Unicode characters can be used.
if (IsDlgButtonChecked(hDlg, IDC_BRAND1)) { TCHAR szProvider[MSGR_MAX_SHORTBRAND]; // In this case, short name is just "MSN Messenger Service"
SHSetIniString(IS_MESSENGER, IK_SHORTNAME, g_szMSNBrand, g_szMsgrIns); GetDlgItemText(hDlg, IDE_MSGRBRAND, szProvider, countof(szProvider)); StrRemoveWhitespace(szProvider); SHSetIniString(IS_MESSENGER, IK_PROVIDERNAME, szProvider, g_szMsgrIns); SHSetIniString(IS_MESSENGER, IK_SHORTNAME, c_szEmpty, g_szMsgrIns); } else { GetDlgItemText(hDlg, IDE_MSGRBRAND2, szBrand, countof(szBrand)); StrRemoveWhitespace(szBrand); SHSetIniString(IS_MESSENGER, IK_SHORTNAME, szBrand, g_szMsgrIns); SHSetIniString(IS_MESSENGER, IK_PROVIDERNAME, c_szEmpty, g_szMsgrIns); } GetDlgItemText(hDlg, IDE_MSGRDOWNLOAD, szDownload, countof(szDownload));
StrRemoveWhitespace(szDownload);
//----- Serialize data to the *.ins file -----
WritePrivateProfileString(IS_MESSENGER, IK_DOWNLOAD, szDownload, g_szMsgrIns);
//----- Standard epilog -----
// Note. Last and classical at that example of the global goo.
g_iCurPage = PPAGE_MESSENGER; EnablePages();
if (((LPNMHDR)lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else if (((LPNMHDR)lParam)->code == PSN_WIZBACK) PagePrev(hDlg); break;
case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break;
case PSN_QUERYCANCEL: return !QueryCancel(hDlg);
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_BRAND1: DisableDlgItem(hDlg, IDE_MSGRBRAND2); DisableDlgItem(hDlg, IDC_NAME2_STATIC); DisableDlgItem(hDlg, IDC_BRAND2_STATIC); EnableDlgItem(hDlg, IDC_NAME1_STATIC); EnableDlgItem(hDlg, IDE_MSGRBRAND); EnableDlgItem(hDlg, IDC_BRAND1_STATIC); break; case IDC_BRAND2: DisableDlgItem(hDlg, IDC_NAME1_STATIC); DisableDlgItem(hDlg, IDE_MSGRBRAND); DisableDlgItem(hDlg, IDC_BRAND1_STATIC); EnableDlgItem(hDlg, IDE_MSGRBRAND2); EnableDlgItem(hDlg, IDC_NAME2_STATIC); EnableDlgItem(hDlg, IDC_BRAND2_STATIC); break; }
break;
default: return FALSE; }
return TRUE; }
INT_PTR CALLBACK MessengerLogoSoundDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR szLogo[MAX_PATH]; TCHAR szLogoLink[MSGR_MAX_URL]; TCHAR szContactOnlineSound[MAX_PATH]; TCHAR szNewEmailSound[MAX_PATH]; TCHAR szNewMessageSound[MAX_PATH]; TCHAR szXML[MSGR_MAX_URL];
UNREFERENCED_PARAMETER(wParam);
switch (message) { case WM_INITDIALOG: //----- Set up the global goo -----
g_hWizard = hDlg;
EnableDBCSChars(hDlg, IDE_LOGO); EnableDBCSChars(hDlg, IDE_MSGRWEBLINK); EnableDBCSChars(hDlg, IDE_CONTACTONLINE); EnableDBCSChars(hDlg, IDE_NEWEMAIL); EnableDBCSChars(hDlg, IDE_NEWMESSAGE ); EnableDBCSChars(hDlg, IDE_XMLURL );
//----- Set up dialog controls -----
Edit_LimitText(GetDlgItem(hDlg, IDE_LOGO), countof(szLogo)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRWEBLINK), countof(szLogoLink)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_CONTACTONLINE), countof(szContactOnlineSound)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_NEWEMAIL), countof(szNewEmailSound)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_NEWMESSAGE), countof(szNewMessageSound)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_XMLURL), countof(szXML)-1);
break;
case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break;
case WM_NOTIFY: switch (((NMHDR FAR *)lParam)->code) { case PSN_SETACTIVE: //----- Standard prolog -----
// Note. Another case of the global goo.
SetBannerText(hDlg);
//----- Initialization of fields -----
// BUGBUG: sounds path storage?
GetPrivateProfileString(IS_MESSENGER, IK_PRODUCTLINK, c_szEmpty, szLogoLink, countof(szLogoLink), g_szMsgrIns); GetPrivateProfileString(IS_MESSENGER, IK_PARTNERLOGO, c_szEmpty, szLogo, countof(szLogo), g_szMsgrIns); GetPrivateProfileString(IS_MESSENGER, IK_CONTACTONLINE, c_szEmpty, szContactOnlineSound, countof(szContactOnlineSound), g_szMsgrIns); GetPrivateProfileString(IS_MESSENGER, IK_NEWEMAIL, c_szEmpty, szNewEmailSound, countof(szNewEmailSound), g_szMsgrIns); GetPrivateProfileString(IS_MESSENGER, IK_INCOMINGIM, c_szEmpty, szNewMessageSound, countof(szNewMessageSound), g_szMsgrIns); GetPrivateProfileString(IS_MESSENGER, IK_XMLLINK, c_szEmpty, szXML, countof(szXML), g_szMsgrIns);
StrRemoveWhitespace(szLogoLink); StrRemoveWhitespace(szLogo); StrRemoveWhitespace(szContactOnlineSound); StrRemoveWhitespace(szNewEmailSound); StrRemoveWhitespace(szNewMessageSound); StrRemoveWhitespace(szXML);
SetDlgItemText(hDlg, IDE_MSGRWEBLINK, szLogoLink); SetDlgItemText(hDlg, IDE_LOGO, szLogo); SetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound); SetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound); SetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound); SetDlgItemText(hDlg, IDE_XMLURL, szXML);
CheckBatchAdvance(hDlg); // standard line
break;
case PSN_WIZBACK: case PSN_WIZNEXT: case PSN_WIZFINISH: if (!CheckField(hDlg, IDE_MSGRWEBLINK, FC_URL) || !CheckField(hDlg, IDE_LOGO, FC_FILE | FC_EXISTS) || !CheckField(hDlg, IDE_CONTACTONLINE, FC_FILE | FC_EXISTS) || !CheckField(hDlg, IDE_NEWEMAIL, FC_FILE | FC_EXISTS) || !CheckField(hDlg, IDE_NEWMESSAGE, FC_FILE | FC_EXISTS) || !CheckField(hDlg, IDE_XMLURL, FC_URL)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; }
//----- Read data from controls into internal variables -----
GetDlgItemText(hDlg, IDE_LOGO, szLogo, countof(szLogo)); GetDlgItemText(hDlg, IDE_MSGRWEBLINK, szLogoLink, countof(szLogoLink)); GetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound, countof(szContactOnlineSound)); GetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound, countof(szNewEmailSound)); GetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound, countof(szNewMessageSound)); GetDlgItemText(hDlg, IDE_XMLURL, szXML, countof(szXML));
StrRemoveWhitespace(szLogo); StrRemoveWhitespace(szLogoLink); StrRemoveWhitespace(szContactOnlineSound); StrRemoveWhitespace(szNewEmailSound); StrRemoveWhitespace(szNewMessageSound); StrRemoveWhitespace(szXML);
//----- Serialize data to the *.ins file -----
WritePrivateProfileString(IS_MESSENGER, IK_PRODUCTLINK, szLogoLink, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_PARTNERLOGO, szLogo, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_CONTACTONLINE, szContactOnlineSound, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_NEWEMAIL, szNewEmailSound, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_INCOMINGIM, szNewMessageSound, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_XMLLINK, szXML, g_szMsgrIns);
//----- Standard epilog -----
// Note. Last and classical at that example of the global goo.
g_iCurPage = PPAGE_LOGOSOUND; EnablePages();
if (((LPNMHDR)lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else if (((LPNMHDR)lParam)->code == PSN_WIZBACK) PagePrev(hDlg); break;
case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break;
case PSN_QUERYCANCEL: return !QueryCancel(hDlg);
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_BROWSELOGO: GetDlgItemText(hDlg, IDE_LOGO, szLogo, countof(szLogo)); if (BrowseForFile(hDlg, szLogo, countof(szLogo), GFN_GIF)) SetDlgItemText(hDlg, IDE_LOGO, szLogo); break; case IDC_BROWSEONLINE: GetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound, countof(szContactOnlineSound)); if (BrowseForFile(hDlg, szContactOnlineSound, countof(szContactOnlineSound), GFN_WAV)) SetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound); break; case IDC_BROWSENEWEMAIL: GetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound, countof(szNewEmailSound)); if (BrowseForFile(hDlg, szNewEmailSound, countof(szNewEmailSound), GFN_WAV)) SetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound); break; case IDC_BROWSENEWMESSAGE: GetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound, countof(szNewMessageSound)); if (BrowseForFile(hDlg, szNewMessageSound, countof(szNewMessageSound), GFN_WAV)) SetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound); break;
} break;
default: return FALSE; }
return TRUE; }
INT_PTR CALLBACK MessengerAccountsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR szSignup[MSGR_MAX_URL]; TCHAR szMailServer[MAX_PATH]; TCHAR szDefaultDomain[MAX_PATH];
UNREFERENCED_PARAMETER(wParam);
switch (message) { case WM_INITDIALOG: //----- Set up the global goo -----
g_hWizard = hDlg;
//----- Set up dialog controls -----
EnableDBCSChars(hDlg, IDE_SIGNUP); EnableDBCSChars(hDlg, IDE_POPSERVER); EnableDBCSChars(hDlg, IDE_MAILURL);
Edit_LimitText(GetDlgItem(hDlg, IDE_SIGNUP), countof(szSignup)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_POPSERVER), countof(szMailServer)-1); Edit_LimitText(GetDlgItem(hDlg, IDC_DOMAINCOMBO), countof(szDefaultDomain)-1); Edit_LimitText(GetDlgItem(hDlg, IDE_MAILURL), countof(szMailServer)-1);
SendDlgItemMessage(hDlg, IDC_DOMAINCOMBO, CB_ADDSTRING, 0, (LPARAM) g_szHotmailDomain); SendDlgItemMessage(hDlg, IDC_DOMAINCOMBO, CB_ADDSTRING, 0, (LPARAM) g_szPassportDomain); SendDlgItemMessage(hDlg, IDC_DOMAINCOMBO, CB_SETCURSEL, 0, 0);
break;
case WM_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break;
case WM_NOTIFY: switch (((NMHDR FAR *)lParam)->code) { case PSN_SETACTIVE: { //----- Standard prolog -----
// Note. Another case of the global goo.
SetBannerText(hDlg);
//----- Initialization of fields -----
GetPrivateProfileString(IS_MESSENGER, IK_PPSIGNUP, c_szEmpty, szSignup, countof(szSignup), g_szMsgrIns); GetPrivateProfileString(IS_MESSENGER, IK_PPDOMAIN, c_szEmpty, szDefaultDomain, countof(szDefaultDomain), g_szMsgrIns);
StrRemoveWhitespace(szSignup); StrRemoveWhitespace(szDefaultDomain);
SetDlgItemText(hDlg, IDE_SIGNUP, szSignup);
TCHAR szMailFunction[2]; GetPrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, c_szEmpty, szMailFunction, countof(szMailFunction), g_szMsgrIns);
if (TEXT('1') == *szMailFunction) // 1 == POP mail
{ GetPrivateProfileString(IS_MESSENGER, IK_MAILSERVER, c_szEmpty, szMailServer, countof(szMailServer), g_szMsgrIns); StrRemoveWhitespace(szMailServer); SetDlgItemText(hDlg, IDE_POPSERVER, szMailServer);
TCHAR szSPA[2]; GetPrivateProfileString(IS_MESSENGER, IK_MAILSPA, c_szEmpty, szSPA, countof(szSPA), g_szMsgrIns); if (TEXT('1') == *szSPA) { CheckDlgButton(hDlg, IDC_MSGRSPA, BST_CHECKED); } else { CheckDlgButton(hDlg, IDC_MSGRSPA, BST_UNCHECKED); }
// Simulate click on radio button to gray out appropriate controls
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_RADIO_MAILSERVER, BN_CLICKED), NULL); CheckRadioButton(hDlg, IDC_RADIO_HOTMAIL, IDC_RADIO_MAILSERVER, IDC_RADIO_MAILSERVER); } else if (TEXT('2') == *szMailFunction) // 2 = URL mail
{ GetPrivateProfileString(IS_MESSENGER, IK_MAILURL, c_szEmpty, szMailServer, countof(szMailServer), g_szMsgrIns); StrRemoveWhitespace(szMailServer); SetDlgItemText(hDlg, IDE_MAILURL, szMailServer);
// Simulate click on radio button to gray out appropriate controls
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_RADIO_URL, BN_CLICKED), NULL); CheckRadioButton(hDlg, IDC_RADIO_HOTMAIL, IDC_RADIO_MAILSERVER, IDC_RADIO_URL); } else { // Simulate click on first radio button to gray out appropriate controls
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_RADIO_HOTMAIL, BN_CLICKED), NULL); CheckRadioButton(hDlg, IDC_RADIO_HOTMAIL, IDC_RADIO_MAILSERVER, IDC_RADIO_HOTMAIL); }
if (*szDefaultDomain) { SetDlgItemText(hDlg, IDC_DOMAINCOMBO, szDefaultDomain); }
CheckBatchAdvance(hDlg); // standard line
break; } case PSN_WIZBACK: case PSN_WIZNEXT: case PSN_WIZFINISH: if (!CheckField(hDlg, IDE_SIGNUP, FC_URL) || !CheckField(hDlg, IDC_DOMAINCOMBO, FC_NOSPACE)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; }
//----- Read data from controls into internal variables -----
if (IsDlgButtonChecked(hDlg, IDC_RADIO_URL)) { if (!CheckField(hDlg, IDE_MAILURL, FC_URL | FC_NONNULL)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; }
GetDlgItemText(hDlg, IDE_MAILURL, szMailServer, countof(szMailServer)); StrRemoveWhitespace(szMailServer); WritePrivateProfileString(IS_MESSENGER, IK_MAILURL, szMailServer, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_MAILSERVER, c_szEmpty, g_szMsgrIns); // 2 signifies URL Mail integration
WritePrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, TEXT("2"), g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_MAILSPA, TEXT("0"), g_szMsgrIns); } else if (IsDlgButtonChecked(hDlg, IDC_RADIO_MAILSERVER)) { if (!CheckField(hDlg, IDE_POPSERVER, FC_NOSPACE)) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1); break; }
GetDlgItemText(hDlg, IDE_POPSERVER, szMailServer, countof(szMailServer)); StrRemoveWhitespace(szMailServer); WritePrivateProfileString(IS_MESSENGER, IK_MAILSERVER, szMailServer, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_MAILURL, c_szEmpty, g_szMsgrIns); // 1 signifies POP Mail integration
WritePrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, TEXT("1"), g_szMsgrIns);
WritePrivateProfileString( IS_MESSENGER, IK_MAILSPA, IsDlgButtonChecked(hDlg, IDC_MSGRSPA) ? TEXT("1") : TEXT("0"), g_szMsgrIns); } else { WritePrivateProfileString(IS_MESSENGER, IK_MAILSERVER, c_szEmpty, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_MAILURL, c_szEmpty, g_szMsgrIns); // 0 signifies Hotmail Mail integration
WritePrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, TEXT("0"), g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_MAILSPA, TEXT("0"), g_szMsgrIns); }
GetDlgItemText(hDlg, IDE_SIGNUP, szSignup, countof(szSignup)); GetDlgItemText(hDlg, IDC_DOMAINCOMBO, szDefaultDomain, countof(szDefaultDomain));
StrRemoveWhitespace(szSignup); StrRemoveWhitespace(szDefaultDomain);
//----- Serialize data to the *.ins file -----
WritePrivateProfileString(IS_MESSENGER, IK_PPSIGNUP, szSignup, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_PPDOMAIN, szDefaultDomain, g_szMsgrIns); WritePrivateProfileString(IS_MESSENGER, IK_PPSUFFIX, szDefaultDomain, g_szMsgrIns);
//----- Standard epilog -----
// Note. Last and classical at that example of the global goo.
g_iCurPage = PPAGE_MSGRACCOUNTS; EnablePages();
if (((LPNMHDR)lParam)->code == PSN_WIZNEXT) PageNext(hDlg); else if (((LPNMHDR)lParam)->code == PSN_WIZBACK) PagePrev(hDlg); break;
case PSN_HELP: IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate); break;
case PSN_QUERYCANCEL: return !QueryCancel(hDlg);
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_RADIO_HOTMAIL: DisableDlgItem(hDlg, IDC_MAILURL_STATIC); DisableDlgItem(hDlg, IDE_MAILURL); DisableDlgItem(hDlg, IDE_POPSERVER); DisableDlgItem(hDlg, IDC_MAILSERVER_STATIC); DisableDlgItem(hDlg, IDC_MSGRSPA); break; case IDC_RADIO_MAILSERVER: DisableDlgItem(hDlg, IDC_MAILURL_STATIC); DisableDlgItem(hDlg, IDE_MAILURL); EnableDlgItem(hDlg, IDE_POPSERVER); EnableDlgItem(hDlg, IDC_MAILSERVER_STATIC); EnableDlgItem(hDlg, IDC_MSGRSPA); break; case IDC_RADIO_URL: EnableDlgItem(hDlg, IDC_MAILURL_STATIC); EnableDlgItem(hDlg, IDE_MAILURL); DisableDlgItem(hDlg, IDE_POPSERVER); DisableDlgItem(hDlg, IDC_MAILSERVER_STATIC); DisableDlgItem(hDlg, IDC_MSGRSPA); break; }
break;
default: return FALSE; }
return TRUE; }
const CHAR g_szEmbeddedStrings[] = "[Strings.Embedded]";
BOOL RewriteMsgrInfWithBrand(LPTSTR lpszINF) { BOOL bRet = FALSE;
TCHAR szBrand[MSGR_MAX_SHORTBRAND]; GetPrivateProfileString(IS_MESSENGER, IK_SHORTNAME, c_szEmpty, szBrand, countof(szBrand), g_szMsgrIns);
CHAR szaBrand[MSGR_MAX_SHORTBRAND]; T2Abux(szBrand, szaBrand);
// Replace the brand in the INF, as specified by the PGMITEM_MSMSGS field
TCHAR szOldBrand[MSGR_MAX_SHORTBRAND]; GetPrivateProfileString(TEXT("Strings"), TEXT("PGMITEM_MSMSGS"), c_szEmpty, szOldBrand, countof(szOldBrand), lpszINF); // because we're mixing ini string functions with binary file operations
WritePrivateProfileString(NULL, NULL, NULL, lpszINF);
CHAR szaOldBrand[MSGR_MAX_SHORTBRAND]; T2Abux(szOldBrand, szaOldBrand);
ASSERT(*szaOldBrand && *szaBrand && "Both of these parameters should be valid when RewriteMsgrInfWithBrand is called");
if (*szaOldBrand && *szaBrand) { CHAR szaINFBrand[MSGR_MAX_SHORTBRAND*4]; StrCpyA(szaINFBrand, szaBrand); HANDLE hFile = ::CreateFile(lpszINF, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE != hFile) { DWORD dwSize = ::GetFileSize(hFile, NULL); if (dwSize) { LPSTR lpszData = new CHAR[dwSize + 1]; if (lpszData) { ULONG nRead; if (ReadFile(hFile, lpszData, dwSize, &nRead, NULL)) { // Null terminate the data
lpszData[nRead] = '\0';
// Reset the file pointer so we can write the branded INF data
// over the old data.
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
LPSTR pszEmbeddedStrings = StrStrA(lpszData, g_szEmbeddedStrings);
// Write data up until an occurrence of the old brand name, replace the old brand name with the new
// brand name, and loop.
LPSTR lpszDataStart = lpszData, lpszDataEnd; DWORD dwBytesWritten; BOOL fPassedEmbedded = FALSE; while (NULL != (lpszDataEnd = StrStrA(lpszDataStart, szaOldBrand))) { // If we pass the [Strings.Embedded] section header,
// that means all occurrences of the brand from here on are
// embedded, so we need to quadruple the quotes.
if (!fPassedEmbedded && pszEmbeddedStrings && lpszDataEnd > pszEmbeddedStrings) { LPSTR pszTemp = szaINFBrand, pszSrc = szaBrand;
fPassedEmbedded = TRUE; // Need to write FOUR of either kind of quote to make it show up correctly in the INF
// in the embedded strings
while (*pszSrc) { if ('\'' == *pszSrc || '\"' == *pszSrc) { *pszTemp++ = *pszSrc; *pszTemp++ = *pszSrc; *pszTemp++ = *pszSrc; } *pszTemp++ = *pszSrc++; } *pszTemp = '\0'; }
WriteFile(hFile, lpszDataStart, (DWORD)(lpszDataEnd - lpszDataStart), &dwBytesWritten, NULL); WriteFile(hFile, szaINFBrand, lstrlenA(szaINFBrand), &dwBytesWritten, NULL); lpszDataStart = lpszDataEnd + lstrlenA(szaOldBrand); } // Write the rest of the data after the last occurrence of the old brand name.
WriteFile(hFile, lpszDataStart, dwSize - (DWORD)(lpszDataStart - lpszData), &dwBytesWritten, NULL); bRet = SetEndOfFile(hFile); } } }
// because we're mixing ini string functions with binary file operations
FlushFileBuffers(hFile); CloseHandle(hFile); } } return bRet; }
|