⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regfavorites.cpp

📁 wince IE浏览器的源码
💻 CPP
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include "Precomp.h"

#ifndef NO_FAVORITES

#include "RegFavorites.h"
#include "resource.h"
#include "regkeys.h"
#include "defines.h"

CRegFavorites::CRegFavorites ()
{
	m_bRename = FALSE;
}

CRegFavorites::~CRegFavorites ()
{
}

LPTSTR CRegFavorites::GetRootFolder ()
{
	return REG_KEY_BROWSER_FAVORITES;
}

LRESULT CRegFavorites::GetFolderInfo (LPTSTR szFolder, 
									  DWORD &dwSubFolders,
									  DWORD &dwFavorites)
{
	LONG lResult = ERROR_SUCCESS;
	HKEY hKey    = NULL;
	LPTSTR szTmpFolder = (szFolder)?szFolder:REG_KEY_BROWSER_FAVORITES;

	lResult = RegOpenKeyEx (HKEY_CURRENT_USER,
							szTmpFolder,
							0,
							0,
							&hKey);

	if (lResult == ERROR_SUCCESS)
	{
		lResult = RegQueryInfoKey(hKey, 
								  NULL,
							      NULL,
								  NULL,
						          &dwSubFolders,
								  NULL,
								  NULL,
								  &dwFavorites,
								  NULL,
								  NULL,
								  NULL,
								  NULL);
	}

	if (hKey)
		RegCloseKey (hKey);

	return lResult;
}

LPTSTR CRegFavorites::GetURL (LPTSTR szFavorite)
{
	HKEY    hKey  = NULL;
    PBYTE	pByte = NULL;
	LPTSTR  szURL = NULL;
    DWORD	size;
	DWORD	type;

	if ((szFavorite) && (_tcslen (szFavorite) > 0))
	{
		if (ERROR_SUCCESS == RegOpenKeyEx (HKEY_CURRENT_USER,
								   		   szFavorite,
										   0,
										   0,
										   &hKey))
		{
			if ((ERROR_SUCCESS == RegQueryValueEx(hKey, 
												  REG_KEY_BROWSER_URL, 
												  NULL, 
												  &type, 
												  NULL, 
												  &size)) && 
				(type == REG_SZ || type == REG_MULTI_SZ))
			{
				pByte = (PBYTE) new BYTE[size + sizeof (TCHAR)];
				if ((!pByte) || (RegQueryValueEx(hKey, REG_KEY_BROWSER_URL, 
												 NULL, NULL, pByte, &size) != ERROR_SUCCESS) || (pByte[0] == 0))
				{
					if (pByte) delete[] pByte;
					pByte = NULL;
				}
				else
					szURL = reinterpret_cast<LPTSTR>(pByte);
			}
		}
	}

	if (hKey)
		RegCloseKey (hKey);

	return szURL;
}

BOOL CRegFavorites::IsFavAvailable ()
{
	BOOL bRetVal = FALSE;
	HKEY hKey    = NULL;

    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, 
									  REG_KEY_BROWSER_FAVORITES, 
									  0, 
									  0, 
									  &hKey))
	{
		bRetVal = TRUE;
		RegCloseKey (hKey);
	}

	return bRetVal;
}

LRESULT CRegFavorites::EnumFolders (LPTSTR szPath,
								    DWORD dwIdx,
									LPTSTR szBuffer,
									DWORD &dwBufLen)
{
	HKEY hKey = NULL;
	LONG lRetVal = ERROR_SUCCESS;

	if (ERROR_SUCCESS != (lRetVal = RegOpenKeyEx (HKEY_CURRENT_USER,
											      szPath,
												  0,0,
												  &hKey)))
		goto RETURN;

	lRetVal = RegEnumKeyEx (hKey,dwIdx,szBuffer,&dwBufLen,
							NULL,NULL,NULL,NULL);

RETURN:

	if (hKey)
		RegCloseKey (hKey);

	return lRetVal;
}

LRESULT CRegFavorites::CreateFavorite (LPTSTR szPath,
									   LPTSTR szFavTitle,
									   LPTSTR szURL)
{
	LPTSTR szTmpPath = (szPath)?szPath:REG_KEY_BROWSER_FAVORITES;
	LONG   lResult   = ERROR_SUCCESS;
	HKEY   hKey      = NULL;
	TCHAR  szRegKey[MAX_REGKEY_LEN-1];
	DWORD  dwDisposition;
	
	INIT_STR (szRegKey);
	wsprintf (szRegKey, L"%s\\%s",szTmpPath,szFavTitle);
    lResult = RegCreateKeyEx(HKEY_CURRENT_USER, 
							 szRegKey,
							 0, 
							 TEXT(""), 
							 0, 
							 KEY_ALL_ACCESS, 
				             NULL, 
							 &hKey, 
							 &dwDisposition);
	if (lResult == ERROR_SUCCESS)
	{
		if (szURL != NULL)
			lResult = RegSetValueEx(hKey, 
									REG_KEY_BROWSER_URL, 
									0, 
									REG_SZ, 
									(BYTE *)szURL, 
									(_tcslen(szURL)+1)*sizeof(TCHAR));
		RegFlushKey(hKey);
		RegCloseKey(hKey);
	}

	if (dwDisposition == REG_OPENED_EXISTING_KEY)
		lResult = ERR_DUPLICATE_ENTRY;

	return lResult;
}

LRESULT CRegFavorites::CopyFolder (LPTSTR szSourcePath, LPTSTR szDestPath)
{
	return MoveKeys (szSourcePath, szDestPath);
}

LRESULT CRegFavorites::DeleteFolder (LPTSTR szPath)
{
	LONG lResult = RegDeleteKey (HKEY_CURRENT_USER, szPath);
	return lResult;
}

LRESULT CRegFavorites::Rename (LPTSTR szOldName, LPTSTR szNewName)
{
	LONG lResult = ERROR_SUCCESS;

	m_bRename = TRUE;
	lResult = CopyFolder (szOldName, szNewName);

	if (lResult == ERROR_SUCCESS)
		lResult = RegDeleteKey(HKEY_CURRENT_USER,szOldName);

	return lResult;
}

BOOL CRegFavorites::IsDuplicateFavorite (LPTSTR szPath, LPTSTR szFavTitle)
{
	TCHAR  szRegKey[MAX_REGKEY_LEN-1];
	BOOL   bRetVal = FALSE;
	HKEY   hKey = NULL;

	INIT_STR (szRegKey);

	if ((szPath == NULL) || (!szPath[0]))
		wsprintf (szRegKey, L"%s\\%s",REG_KEY_BROWSER_FAVORITES,
										  szFavTitle);
	else
		wsprintf (szRegKey, L"%s\\%s",szPath,
										  szFavTitle);
	
	if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, 
									  szRegKey, 
									  0, 
									  KEY_READ, 
									  &hKey))
	{
		bRetVal = TRUE;
		RegCloseKey (hKey);
	}

	return bRetVal;
}

LRESULT CRegFavorites::MoveRegValues (HKEY hKeySrc, HKEY hKeyDest)
{
	LONG lRetVal		  = 0;
	DWORD dwIndex		  = 0;
	DWORD dwValueNameSize = 0;
	DWORD dwType		  = 0;
	DWORD dwDataSize	  = 0;
	TCHAR *szValueName; 
	TCHAR *szData; 
       
       szValueName = new TCHAR[MAX_VAL_NAME];
       szData = new TCHAR[MAX_URL];
       
       if(!szValueName || !szData)
            goto Exit;


	INIT_STR (szValueName);
	INIT_STR (szData);
	
	dwValueNameSize = MAX_VAL_NAME;
	dwDataSize = MAX_URL;

	while (ERROR_NO_MORE_ITEMS != (lRetVal = RegEnumValue (hKeySrc,
														   dwIndex++,
														   szValueName,
														   &dwValueNameSize,
														   NULL,
														   &dwType,
														   (LPBYTE)szData,
														   &dwDataSize)))
	{
		if (lRetVal != ERROR_SUCCESS)
			continue;

		lRetVal = RegSetValueEx(hKeyDest,szValueName,0,
							    dwType,(LPBYTE)szData,dwDataSize);
		dwValueNameSize = MAX_VAL_NAME;
		dwDataSize = MAX_URL;
	}

Exit:
       delete [] szValueName;
       delete [] szData;
	return lRetVal;
}

LRESULT CRegFavorites::MoveKeys (LPTSTR szSourceKey, LPTSTR szDestinKey)
{
	HKEY  hKeyDestin = NULL;
	HKEY  hKeySource = NULL;
	DWORD dwPos	   	 = 0;
	LONG  lResult    = 0;
	DWORD dwIndex    = 0;
	DWORD dwSize     = 0;
	TCHAR *tszSrcKey; 
	TCHAR *tszDestKey; 
	TCHAR *szTmpKey;  

       tszSrcKey = new TCHAR[MAX_REGKEY_LEN];
       tszDestKey = new TCHAR[MAX_REGKEY_LEN];
       szTmpKey = new TCHAR[FAV_NAME_LEN];
       if(!tszSrcKey || !tszDestKey || !szTmpKey)
            goto RETURN;
            
	INIT_STR (tszSrcKey);
	INIT_STR (tszDestKey);
	INIT_STR (szTmpKey);

	// Open the source key
	if (ERROR_SUCCESS != (lResult = RegOpenKeyEx(HKEY_CURRENT_USER,
												 szSourceKey,
												 0,
												 0,
												 &hKeySource)))
		goto RETURN;

	// Create the source key in destination
	if (m_bRename)
	{
		wcsncpy (tszDestKey, szDestinKey, MAX_REGKEY_LEN-1);
		m_bRename = FALSE;
	}
	else
		wsprintf (tszDestKey, L"%s\\%s", szDestinKey, wcsrchr(szSourceKey,'\\')+1);

	if (ERROR_SUCCESS != (lResult = RegCreateKeyEx(HKEY_CURRENT_USER,
												   tszDestKey,
												   0, NULL, 0, 0, NULL,
												   &hKeyDestin,
												   &dwPos)))
		goto RETURN;

	// Move all the values from source to destination
	MoveRegValues (hKeySource, hKeyDestin);

	dwSize = FAV_NAME_LEN;
	while (ERROR_NO_MORE_ITEMS != (lResult=RegEnumKeyEx(hKeySource,
														dwIndex++,
														szTmpKey,
														&dwSize,
														NULL,
														NULL,
														NULL,
														NULL)))
	{
		if (lResult != ERROR_SUCCESS)
			continue;

		wsprintf (tszSrcKey, L"%s\\%s", szSourceKey, szTmpKey);
		MoveKeys (tszSrcKey, tszDestKey);
		dwSize = FAV_NAME_LEN;
	}
	
	if (lResult == ERROR_NO_MORE_ITEMS)
		lResult = ERROR_SUCCESS;

RETURN:
       delete [] tszSrcKey;
       delete [] tszDestKey;
       delete [] szTmpKey;
       
	if (hKeySource)
		RegCloseKey(hKeySource);

	if (hKeyDestin)
		RegCloseKey(hKeyDestin);

	return lResult;
}

#endif // ndef NO_FAVORITES

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -