|
|
///////////////////////////////////////////////////////////////////////
// Microsoft Windows //
// Copyright(c) Microsoft Corp., 1995 //
///////////////////////////////////////////////////////////////////////
//
// GENERAL.C - "General" property page for InetCpl
//
// HISTORY:
//
// 6/22/96 t-gpease moved code from dialdlg.c - no changes
//
#include "inetcplp.h"
#include <urlhist.h>
#include <initguid.h>
#include <shlguid.h>
#include <cleanoc.h>
#include <mluisupp.h>
//#include <shdocvw.h>
SHDOCAPI_(BOOL) ParseURLFromOutsideSourceA (LPCSTR psz, LPSTR pszOut, LPDWORD pcchOut, LPBOOL pbWasSearchURL); SHDOCAPI_(BOOL) ParseURLFromOutsideSourceW (LPCWSTR psz, LPWSTR pszOut, LPDWORD pcchOut, LPBOOL pbWasSearchURL); #ifdef UNICODE
#define ParseURLFromOutsideSource ParseURLFromOutsideSourceW
#else
#define ParseURLFromOutsideSource ParseURLFromOutsideSourceA
#endif
//
// See inetcplp.h for documentation on this flag
//
BOOL g_fReloadHomePage = FALSE;
//
// Private Functions and Structures
//
// from cachecpl.c
#define CONTENT 0
BOOL InvokeCachevu(HWND hDlg); INT_PTR CALLBACK EmptyCacheDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam); INT_PTR CALLBACK EmptyCacheCookiesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam); BOOL DeleteCacheCookies();
INT_PTR CALLBACK ColorsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam); INT_PTR CALLBACK AccessibilityDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
/////// General Tab Info Structure ///////
typedef struct _GeneralTabInfo { HWND hDlg; HWND hwndUrl; TCHAR szCurrentURL[INTERNET_MAX_URL_LENGTH]; // current url in browser
TCHAR szStartPageURL[INTERNET_MAX_URL_LENGTH]; // current url for start page
BOOL fInternalChange; BOOL fChanged;
HRESULT hrOle; // result of com initialization
} GeneralTabInfo, *LPGENERALTABINFO, GENERALTABINFO;
void SetandSelectText(LPGENERALTABINFO pgti, HWND hwnd, LPTSTR psz); BOOL GetHistoryFolderPath(LPTSTR pszPath); void EmptyHistory(LPGENERALTABINFO pgti); void HistorySave(LPGENERALTABINFO pgti); static DWORD GetDaysToKeep(VOID); VOID SetDaysToKeep(DWORD dwDays); void GetDefaultStartPage(LPGENERALTABINFO pgti); HRESULT _GetStdLocation(LPTSTR pszPath, DWORD cbPathSize, UINT id); HRESULT _SetStdLocation(LPTSTR szPath, UINT id);
// from shdocvw
#define IDS_DEF_HOME 998 //// WARNING!!! DO NOT CHANGE THESE VALUES
#define IDS_DEF_SEARCH 999 //// WARNING!!! INETCPL RELIES ON THEM
#define IDS_SEARCHPAGE IDS_DEF_SEARCH
#define IDS_STARTPAGE IDS_DEF_HOME
#if defined(ux10) && defined(UNIX)
//Work around for mmap limitation in hp-ux10
#define MAX_HISTORY_DAYS 30
#else
#define MAX_HISTORY_DAYS 999
#endif
#define DEFAULT_DAYS_TO_KEEP 14
#define SAFERELEASE(p) if(p) {(p)->Release(); (p) = NULL;}
TCHAR szDefURLValueNames[] = TEXT("Default_Page_URL");
//
// Functions
//
BOOL General_InitDialog(HWND hDlg) { DWORD cb = sizeof(DWORD); LPGENERALTABINFO pgti; #ifdef UNIX
BOOL bCacheIsReadOnly = FALSE; #endif /* UNIX */
// allocate memory for a structure which will hold all the info
// gathered from this page
//
pgti = (LPGENERALTABINFO)LocalAlloc(LPTR, sizeof(GENERALTABINFO)); if (!pgti) { EndDialog(hDlg, 0); return FALSE; } SetWindowLongPtr(hDlg, DWLP_USER, (LPARAM)pgti);
// NOTE (andrewgu): ie5.5 b#106468 - need to initialize COM before calling SHAutoComplete.
// it will be uninitialized during WM_DESTROY.
pgti->hrOle = SHCoInitialize();
// cross-lang platform support
SHSetDefaultDialogFont(hDlg, IDC_START_ADDRESS); SHAutoComplete(GetDlgItem(hDlg, IDC_START_ADDRESS), SHACF_DEFAULT);
pgti->hDlg = hDlg; // enable the "Use Current" button if we have a current url
StrCpyN(pgti->szCurrentURL, g_szCurrentURL, ARRAYSIZE(pgti->szCurrentURL)); EnableWindow(GetDlgItem(hDlg, IDC_USECURRENT), pgti->szCurrentURL[0]);
// get the url edit control and set the text limit
pgti->hwndUrl = GetDlgItem(hDlg, IDC_START_ADDRESS); SendMessage(pgti->hwndUrl, EM_LIMITTEXT, ARRAYSIZE(pgti->szStartPageURL)-1, 0);
GetDefaultStartPage(pgti); _GetStdLocation(pgti->szStartPageURL, ARRAYSIZE(pgti->szStartPageURL), IDS_STARTPAGE); SetandSelectText(pgti, pgti->hwndUrl, (LPTSTR)pgti->szStartPageURL); // set restrictions on history controls
SendDlgItemMessage(pgti->hDlg, IDC_HISTORY_SPIN, UDM_SETRANGE, 0, MAKELPARAM(MAX_HISTORY_DAYS, 0));
SendDlgItemMessage(pgti->hDlg, IDC_HISTORY_SPIN, UDM_SETPOS, 0, MAKELPARAM((WORD) GetDaysToKeep(), 0));
Edit_LimitText(GetDlgItem(hDlg,IDC_HISTORY_DAYS),3); // limit edit ctrl to 3 chars
// only when invoked from View|Options
if (g_szCurrentURL[0]) { TCHAR szTitle[128]; MLLoadString(IDS_INTERNETOPTIONS, szTitle, ARRAYSIZE(szTitle)); SendMessage(GetParent(hDlg), WM_SETTEXT, 0, (LPARAM)szTitle); }
// disable stuff based on restrictions
if (g_restrict.fPlaces) { EnableWindow(GetDlgItem(hDlg, IDC_START_ADDRESS), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_USEDEFAULT), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_USEBLANK), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_USECURRENT), FALSE); } if (g_restrict.fCacheReadOnly) { EnableWindow(GetDlgItem(hDlg, IDC_CACHE_DELETE_COOKIES), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CACHE_DELETE_FILES), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CACHE_SETTINGS), FALSE); } #ifdef UNIX
bCacheIsReadOnly = IsCacheReadOnly();
if (bCacheIsReadOnly) { EnableWindow(GetDlgItem(hDlg, IDC_CACHE_DELETE_COOKIES), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CACHE_DELETE_FILES), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CACHE_SETTINGS), FALSE); }
if (g_restrict.fCache || bCacheIsReadOnly) { TCHAR szText[1024]; MLLoadString(IDS_READONLY_CACHE_TEXT, szText, ARRAYSIZE(szText)); SetWindowText(GetDlgItem(hDlg, IDC_READONLY_CACHE_WARNING), szText); ShowWindow( GetDlgItem(hDlg, IDC_READONLY_CACHE_WARNING), SW_SHOW ); ShowWindow( GetDlgItem(hDlg, IDC_TEMP_INTERNET_TEXT), SW_HIDE); } #endif /* !UNIX */
if (g_restrict.fHistory) { EnableWindow(GetDlgItem(hDlg, IDC_HISTORY_DAYS), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_HISTORY_SPIN), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_HISTORY_CLEAR), FALSE); } return TRUE; }
BOOL General_OnCommand(LPGENERALTABINFO pgti, UINT id, UINT nCmd) { switch (id) {
case IDC_START_ADDRESS: switch (nCmd) { case EN_CHANGE: if (!pgti->fInternalChange) { PropSheet_Changed(GetParent(pgti->hDlg),pgti->hDlg); pgti->fChanged = TRUE; } break; } break;
case IDC_USECURRENT: if (nCmd == BN_CLICKED) { StrCpyN(pgti->szStartPageURL, pgti->szCurrentURL, ARRAYSIZE(pgti->szStartPageURL)); SetandSelectText(pgti, pgti->hwndUrl, pgti->szStartPageURL); PropSheet_Changed(GetParent(pgti->hDlg),pgti->hDlg); pgti->fChanged = TRUE; } break;
case IDC_USEDEFAULT: if (nCmd == BN_CLICKED) { GetDefaultStartPage(pgti); SetandSelectText(pgti, pgti->hwndUrl, pgti->szStartPageURL); PropSheet_Changed(GetParent(pgti->hDlg),pgti->hDlg); pgti->fChanged = TRUE; } break;
case IDC_USEBLANK: if (nCmd == BN_CLICKED) { StrCpyN(pgti->szStartPageURL, TEXT("about:blank"), ARRAYSIZE(pgti->szStartPageURL)); SetandSelectText(pgti, pgti->hwndUrl, pgti->szStartPageURL); PropSheet_Changed(GetParent(pgti->hDlg),pgti->hDlg); pgti->fChanged = TRUE; } break;
case IDC_HISTORY_SPIN: case IDC_HISTORY_DAYS: if (pgti && (nCmd == EN_CHANGE)) { PropSheet_Changed(GetParent(pgti->hDlg),pgti->hDlg); pgti->fChanged = TRUE; } break;
case IDC_HISTORY_VIEW: { TCHAR szPath[MAX_PATH];
if (!GetHistoryFolderPath(szPath)) { GetWindowsDirectory(szPath, ARRAYSIZE(szPath)); PathAppend(szPath, TEXT("history")); }
SHELLEXECUTEINFO shei= { 0 };
shei.cbSize = sizeof(shei); shei.lpFile = szPath; shei.lpClass = TEXT("Folder"); shei.fMask = SEE_MASK_CLASSNAME; shei.nShow = SW_SHOWNORMAL; ShellExecuteEx(&shei);
break; }
case IDC_HISTORY_CLEAR: if (MsgBox(pgti->hDlg, IDS_ClearHistory, MB_ICONQUESTION, MB_YESNO | MB_DEFBUTTON2 ) == IDYES) {
HCURSOR hOldCursor = NULL; HCURSOR hNewCursor = NULL;
// IEUNIX-Removing redundant use of MAKEINTRESOURCE
#ifndef UNIX
hNewCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT)); #else
hNewCursor = LoadCursor(NULL, IDC_WAIT); #endif
if (hNewCursor) hOldCursor = SetCursor(hNewCursor);
EmptyHistory(pgti);
if(hOldCursor) SetCursor(hOldCursor);
} break;
case IDC_CACHE_SETTINGS: DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_TEMP_FILES), pgti->hDlg, TemporaryDlgProc);
break; // IDC_ADVANCED_CACHE_FILES_BUTTON
case IDC_CACHE_DELETE_COOKIES: { INT_PTR iRet = DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_CACHE_COOKIES_EMPTY), pgti->hDlg, EmptyCacheCookiesDlgProc);
if (iRet == 1) { HCURSOR hOldCursor = NULL; HCURSOR hAdvancedCursor = NULL; #ifndef UNIX
hAdvancedCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT)); #else
//IEUNIX-Removing redundant use of MAKEINTRESOURCE
hAdvancedCursor = LoadCursor(NULL, IDC_WAIT); #endif
if (hAdvancedCursor) hOldCursor = SetCursor(hAdvancedCursor); DeleteCacheCookies();
if (hOldCursor) SetCursor(hOldCursor); } break; } case IDC_CACHE_DELETE_FILES: { INT_PTR iRet = DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_CACHE_EMPTY), pgti->hDlg, EmptyCacheDlgProc);
if ((iRet == 1) || (iRet == 3)) { HCURSOR hOldCursor = NULL; HCURSOR hAdvancedCursor = NULL; INTERNET_CACHE_CONFIG_INFOA icci; icci.dwContainer = CONTENT;
GetUrlCacheConfigInfoA(&icci, NULL, CACHE_CONFIG_DISK_CACHE_PATHS_FC);
#ifndef UNIX
hAdvancedCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT)); #else
//IEUNIX-Removing redundant use of MAKEINTRESOURCE
hAdvancedCursor = LoadCursor(NULL, IDC_WAIT); #endif
if (hAdvancedCursor) hOldCursor = SetCursor(hAdvancedCursor);
switch (iRet) { case 1: FreeUrlCacheSpaceA(icci.CachePath, 100, STICKY_CACHE_ENTRY); TraceMsg(TF_GENERAL, "Call FreeUrlCacheSpace with 0x%x",STICKY_CACHE_ENTRY); break; case 3: FreeUrlCacheSpaceA(icci.CachePath, 100, 0 /*remove all*/); TraceMsg(TF_GENERAL, "Call FreeUrlCacheSpace with 0"); break; default: break; }
// Remove expired controls from Downloaded Program Files ( OCCache )
// We'll do this silently, which leaves uncertain stuff behing, cuz
// this is preferrable to raising a variable number of confirmation dialogs.
RemoveExpiredControls( REC_SILENT, 0); TraceMsg(TF_GENERAL, "Call RemoveExpiredControls (silent)");
if (hOldCursor) SetCursor(hOldCursor);
} break; }
case IDC_LANGUAGES: if (nCmd == BN_CLICKED) { KickLanguageDialog(pgti->hDlg); } break;
case IDC_FONTS: if (nCmd == BN_CLICKED) OpenFontsDialogEx( pgti->hDlg, NULL ); break;
case IDC_COLORS: if (nCmd == BN_CLICKED) DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_COLORS), pgti->hDlg, ColorsDlgProc); break;
case IDC_ACCESSIBILITY: if (nCmd == BN_CLICKED) DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_ACCESSIBILITY), pgti->hDlg, AccessibilityDlgProc); break; } return TRUE; }
void General_Apply(HWND hDlg) { LPGENERALTABINFO pgti = (LPGENERALTABINFO) GetWindowLongPtr(hDlg, DWLP_USER);
if (pgti->fChanged) { INT_PTR iDays = SendDlgItemMessage(pgti->hDlg, IDC_HISTORY_SPIN, UDM_GETPOS, 0, 0 ); TCHAR szStartPageURL[MAX_URL_STRING]; SendMessage(pgti->hwndUrl, WM_GETTEXT, (WPARAM)ARRAYSIZE(szStartPageURL), (LPARAM)(szStartPageURL)); if (szStartPageURL[0]) { StrCpyN(pgti->szStartPageURL, szStartPageURL, ARRAYSIZE(pgti->szStartPageURL)); PathRemoveBlanks(pgti->szStartPageURL); _SetStdLocation(pgti->szStartPageURL, IDS_STARTPAGE); } else { SendMessage(pgti->hwndUrl, WM_SETTEXT, (WPARAM)ARRAYSIZE(pgti->szStartPageURL), (LPARAM)(pgti->szStartPageURL)); }
// make sure that the edit box is not beyond the maximum allowed value
if (iDays>=0xFFFF) iDays = MAX_HISTORY_DAYS; SetDaysToKeep((DWORD)iDays);
UpdateAllWindows(); // reset this flag, now that we've applied the changes
pgti->fChanged = FALSE; } }
void ReloadHomePageIfNeeded(LPGENERALTABINFO pgti) { ASSERT(pgti); if (!pgti) return;
if (g_fReloadHomePage) { //
// If needed, reload the homepage url from the registry
//
_GetStdLocation(pgti->szStartPageURL, ARRAYSIZE(pgti->szStartPageURL), IDS_STARTPAGE); SetandSelectText(pgti, pgti->hwndUrl, (LPTSTR)pgti->szStartPageURL);
g_fReloadHomePage = FALSE; } }
INT_PTR CALLBACK General_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam) { // get our tab info structure
LPGENERALTABINFO pgti;
if (uMsg == WM_INITDIALOG) return General_InitDialog(hDlg);
else pgti = (LPGENERALTABINFO) GetWindowLongPtr(hDlg, DWLP_USER);
if (!pgti) return FALSE; switch (uMsg) { case WM_NOTIFY: { NMHDR *lpnm = (NMHDR *) lParam;
switch (lpnm->code) { case PSN_SETACTIVE: ReloadHomePageIfNeeded(pgti); return TRUE;
case PSN_KILLACTIVE: #if defined(ux10) && defined(UNIX)
//Work around for mmap limitation in hp-ux10
INT_PTR iDays = SendDlgItemMessage(pgti->hDlg, IDC_HISTORY_SPIN, UDM_GETPOS, 0, 0 ); if (iDays > MAX_HISTORY_DAYS) { MessageBox(pgti->hDlg, TEXT("Days to keep pages in history cannot be greater 30."), NULL, MB_OK); Edit_SetText(GetDlgItem(hDlg,IDC_HISTORY_DAYS), TEXT("30")); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE); return TRUE; } else { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); return TRUE; } #endif
case PSN_QUERYCANCEL: case PSN_RESET: SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); return TRUE;
case PSN_APPLY: ReloadHomePageIfNeeded(pgti); General_Apply(hDlg); break; } break; }
case WM_COMMAND: General_OnCommand(pgti, LOWORD(wParam), HIWORD(wParam)); break;
case WM_HELP: // F1
ResWinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE, HELP_WM_HELP, (DWORD_PTR)(LPSTR)mapIDCsToIDHs); break;
case WM_CONTEXTMENU: // right mouse click
ResWinHelp( (HWND) wParam, IDS_HELPFILE, HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)mapIDCsToIDHs); break;
case WM_DESTROY: // destroying this deliberately flushes its update (see WM_DESTROY in the UpdateWndProc);
SHRemoveDefaultDialogFont(hDlg);
#ifndef UNIX
// Should only be destroyed in process detach
if (g_hwndUpdate) DestroyWindow(g_hwndUpdate); #endif
SHCoUninitialize(pgti->hrOle);
if (pgti) LocalFree(pgti);
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)NULL); // make sure we don't re-enter
break;
} return FALSE; }
////////////////////////////////////////////////////////
//
// helper functions
//
////////////////////////////////////////////////////////
VOID SetDaysToKeep(DWORD dwDays) { HKEY hk; DWORD dwDisp;
DWORD Error = RegCreateKeyEx( HKEY_CURRENT_USER, REGSTR_PATH_URLHISTORY, 0, NULL, 0, KEY_WRITE, NULL, &hk, &dwDisp);
if(ERROR_SUCCESS != Error) { ASSERT(FALSE); return; }
Error = RegSetValueEx( hk, REGSTR_VAL_DAYSTOKEEP, 0, REG_DWORD, (LPBYTE) &dwDays, sizeof(dwDays));
ASSERT(ERROR_SUCCESS == Error);
RegCloseKey(hk);
return; }
static DWORD GetDaysToKeep(VOID) { HKEY hk; DWORD cbDays = sizeof(DWORD); DWORD dwDays = DEFAULT_DAYS_TO_KEEP;
DWORD Error = RegOpenKeyEx( HKEY_CURRENT_USER, REGSTR_PATH_URLHISTORY, 0, KEY_READ, &hk);
if(Error) { Error = RegOpenKeyEx( HKEY_LOCAL_MACHINE, REGSTR_PATH_URLHISTORY, 0, KEY_READ, &hk); }
if(!Error) {
Error = RegQueryValueEx( hk, REGSTR_VAL_DAYSTOKEEP, 0, NULL, (LPBYTE) &dwDays, &cbDays);
RegCloseKey(hk); }
return dwDays; }
typedef HRESULT (* PCOINIT) (LPVOID); typedef VOID (* PCOUNINIT) (VOID); typedef VOID (* PCOMEMFREE) (LPVOID); typedef HRESULT (* PCOCREINST) (REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID * );
HMODULE hOLE32 = NULL; PCOINIT pCoInitialize = NULL; PCOUNINIT pCoUninitialize = NULL; PCOMEMFREE pCoTaskMemFree = NULL; PCOCREINST pCoCreateInstance = NULL;
BOOL _StartOLE32() { if (!hOLE32) hOLE32 = LoadLibrary(TEXT("OLE32.DLL"));
if(!hOLE32) return FALSE;
pCoInitialize = (PCOINIT) GetProcAddress(hOLE32, "CoInitialize"); pCoUninitialize = (PCOUNINIT) GetProcAddress(hOLE32, "CoUninitialize"); pCoTaskMemFree = (PCOMEMFREE) GetProcAddress(hOLE32, "CoTaskMemFree"); pCoCreateInstance = (PCOCREINST) GetProcAddress(hOLE32, "CoCreateInstance");
if(!pCoInitialize || !pCoUninitialize || !pCoTaskMemFree || !pCoCreateInstance) return FALSE;
return TRUE; }
void EmptyHistory(LPGENERALTABINFO pgti) { HRESULT hr = S_OK; IUrlHistoryStg2 *piuhs = NULL;
#ifdef UNIX
LONG lResult; HKEY hkSubKey; DWORD dwIndex; TCHAR szSubKeyName[MAX_PATH + 1]; DWORD cchSubKeyName = ARRAYSIZE(szSubKeyName); TCHAR szClass[MAX_PATH]; DWORD cbClass = ARRAYSIZE(szClass);
/* v-sriran: 12/18/97
* In shdocvw/aclmru.cpp, we keep m_hKey as a handle to the key TypedURLs. * After deleting history, if somebody types something in the address bar, * we create the key again. So, here we are just deleting the contents of * the key TypedURLs and not the key itself. */ /* Open the subkey so we can enumerate any children */ lResult = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Internet Explorer\\TypedURLs"), 0, KEY_ALL_ACCESS, &hkSubKey); if (ERROR_SUCCESS == lResult) { /* I can't just call RegEnumKey with an ever-increasing index, because */ /* I'm deleting the subkeys as I go, which alters the indices of the */ /* remaining subkeys in an implementation-dependent way. In order to */ /* be safe, I have to count backwards while deleting the subkeys. */
/* Find out how many subkeys there are */ lResult = RegQueryInfoKey(hkSubKey, szClass, &cbClass, NULL, &dwIndex, /* The # of subkeys -- all we need */ NULL, NULL, NULL, NULL, NULL, NULL, NULL); if (ERROR_SUCCESS == lResult) { /* dwIndex is now the count of subkeys, but it needs to be */ /* zero-based for RegEnumKey, so I'll pre-decrement, rather */ /* than post-decrement. */ while (ERROR_SUCCESS == RegEnumKey(hkSubKey, --dwIndex, szSubKeyName, cchSubKeyName)) { RegDeleteKey(hkSubKey, szSubKeyName); } } RegCloseKey(hkSubKey); } #else
// Warning : if you ever have subkeys - this will fail on NT
RegDeleteKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Internet Explorer\\TypedURLs")); #endif
// Warning : if you ever have subkeys - this will fail on NT
RegDeleteKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU"));
// this broadcast will nuke the address bars
SendBroadcastMessage(WM_SETTINGCHANGE, 0, (LPARAM)TEXT("Software\\Microsoft\\Internet Explorer\\TypedURLs")); SendBroadcastMessage(WM_SETTINGCHANGE, 0, (LPARAM)TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU"));
//
// As requested (bug 60089) we remove these reg values when history is
// cleared. This will reset the encoding menu UI to the defaults.
//
HKEY hkeyInternational = NULL;
if (ERROR_SUCCESS == RegOpenKeyEx( HKEY_CURRENT_USER, REGSTR_PATH_INTERNATIONAL, 0, KEY_WRITE, &hkeyInternational)) {
ASSERT(hkeyInternational);
RegDeleteValue(hkeyInternational, TEXT("CpCache")); RegDeleteValue(hkeyInternational, TEXT("CNum_CpCache")); RegCloseKey(hkeyInternational);
}
// we will enumerate and kill each entry. <gryn>
// this way we only kill peruser
if (FAILED(pgti->hrOle)) return;
hr = SHCoCreateInstance(NULL, &CLSID_CUrlHistory, NULL, IID_IUrlHistoryStg2, (LPVOID *)&piuhs); if (SUCCEEDED(hr)) piuhs->ClearHistory();
else AssertMsg(FALSE, TEXT("Couldn't create CLSID_CUrlHistory object!"));
SAFERELEASE(piuhs); }
#define HISTORY 2
BOOL GetHistoryFolderPath(LPTSTR pszPath) { INTERNET_CACHE_CONFIG_INFOA cci; cci.dwContainer = HISTORY;
if (GetUrlCacheConfigInfoA(&cci, NULL, CACHE_CONFIG_DISK_CACHE_PATHS_FC)) { #ifdef UNICODE
SHAnsiToUnicode(cci.CachePath, pszPath, MAX_PATH); #else
StrCpyN(pszPath, cci.CachePath, MAX_PATH); #endif
return TRUE; } return FALSE; }
void SetandSelectText(LPGENERALTABINFO pgti, HWND hwnd, LPTSTR psz) { pgti->fInternalChange = TRUE; SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)psz); Edit_SetSel(hwnd, 0, 0); // makesure everything is scrolled over first
Edit_SetSel(hwnd, 0, -1); // select everything
pgti->fInternalChange = FALSE; }
void GetDefaultStartPage(LPGENERALTABINFO pgti) { #ifdef UNICODE
CHAR szPath[MAX_PATH]; CHAR szValue[MAX_PATH]; CHAR szURL[INTERNET_MAX_URL_LENGTH];
SHUnicodeToAnsi(REGSTR_PATH_MAIN,szPath,ARRAYSIZE(szPath)); SHUnicodeToAnsi(szDefURLValueNames,szValue,ARRAYSIZE(szValue)); URLSubRegQueryA(szPath, szValue, TRUE, szURL, ARRAYSIZE(pgti->szStartPageURL), URLSUB_ALL); SHAnsiToUnicode(szURL,pgti->szStartPageURL,ARRAYSIZE(pgti->szStartPageURL)); #else
URLSubRegQueryA(REGSTR_PATH_MAIN, szDefURLValueNames, TRUE, pgti->szStartPageURL, ARRAYSIZE(pgti->szStartPageURL), URLSUB_ALL); #endif
}
HRESULT _GetStdLocation(LPTSTR pszPath, DWORD cbPathSize, UINT id) { HRESULT hres = E_FAIL; LPCTSTR pszName;
switch(id) { case IDS_STARTPAGE: pszName = REGSTR_VAL_STARTPAGE; break;
case IDS_SEARCHPAGE: pszName = REGSTR_VAL_SEARCHPAGE; break; #if 0
case IDM_GOLOCALPAGE: pszName = REGSTR_VAL_LOCALPAGE; break; #endif
default: return E_INVALIDARG; }
#ifdef UNICODE
CHAR szPath[MAX_PATH]; CHAR szValue[MAX_PATH]; CHAR szURL[INTERNET_MAX_URL_LENGTH];
SHUnicodeToAnsi(REGSTR_PATH_MAIN,szPath,ARRAYSIZE(szPath)); SHUnicodeToAnsi(pszName,szValue,ARRAYSIZE(szValue)); if (SUCCEEDED(hres = URLSubRegQueryA(szPath, szValue, TRUE, szURL, ARRAYSIZE(szURL), URLSUB_ALL))) #else
TCHAR szPath[MAX_URL_STRING]; if (SUCCEEDED(hres = URLSubRegQueryA(REGSTR_PATH_MAIN, pszName, TRUE, szPath, ARRAYSIZE(szPath), URLSUB_ALL))) #endif
{ #ifdef UNICODE
SHAnsiToUnicode(szURL,pszPath,cbPathSize); #else
StrCpyN(pszPath, szPath, cbPathSize); #endif
} return hres; }
HRESULT _SetStdLocation(LPTSTR szPath, UINT id) { HRESULT hres = E_FAIL; HKEY hkey; TCHAR szPage[MAX_URL_STRING]; TCHAR szNewPage[MAX_URL_STRING];
DWORD cchNewPage = ARRAYSIZE(szNewPage); BOOL bSearch = FALSE;
// FEATURE: Share this code!!!
// This is Internet Explorer Specific
_GetStdLocation(szPage, ARRAYSIZE(szPage), IDS_STARTPAGE);
if ( ParseURLFromOutsideSource(szPath, szNewPage, &cchNewPage, &bSearch) && (StrCmp(szPage, szNewPage) != 0) ) { if (RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_MAIN, 0, KEY_WRITE, &hkey)==ERROR_SUCCESS) { DWORD cbSize = (lstrlen(szNewPage)+1)*sizeof(TCHAR); if (RegSetValueEx(hkey, REGSTR_VAL_STARTPAGE, 0, REG_SZ, (LPBYTE)szNewPage, cbSize)==ERROR_SUCCESS) { hres = S_OK; } RegCloseKey(hkey); } } return hres; }
|