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

📄 explorerskin.cpp

📁 A Shell Extension Context Menu to Change Skin of Windows Explorer
💻 CPP
字号:
// ExplorerSkin.cpp : Implementation of CExplorerSkin
#include "stdafx.h"
#include "IESkin.h"
#include "ExplorerSkin.h"
#include <atlcom.h>
#include <atlconv.h>
/////////////////////////////////////////////////////////////////////////////
// CExplorerSkin
extern CComModule _Module;

HRESULT CExplorerSkin::Initialize(LPCITEMIDLIST pidlFolder,
								  LPDATAOBJECT pDataObj,
								  HKEY hProgID)
{
	FORMATETC fmt = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
	STGMEDIUM stg = {TYMED_HGLOBAL};
	HDROP hDrop;

	if (FAILED(pDataObj->GetData(&fmt, &stg)))
		return E_INVALIDARG;
	
	hDrop= (HDROP) GlobalLock(stg.hGlobal);
	if (hDrop==NULL)
		return E_INVALIDARG;

	UINT uNumFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
	
	//Only one bitmap can be act as skin!
	if (uNumFiles==1)
	{
		HRESULT hr=S_OK;
		
		if (DragQueryFile(hDrop, 0, m_szFile, MAX_PATH)==0)
		{
			hr=E_INVALIDARG;
		}
				
		GlobalUnlock(stg.hGlobal);
		ReleaseStgMedium(&stg);
		return hr;		
	}
	else
	{
		GlobalUnlock(stg.hGlobal);
		ReleaseStgMedium(&stg);
		return E_INVALIDARG;
	}
}

HRESULT CExplorerSkin::QueryContextMenu(HMENU hMenu,
										UINT uMenuIndex,
										UINT uidFirstCmd,
										UINT uidLastCmd,
										UINT uFlags)
{
	if (uFlags & CMF_DEFAULTONLY)
	{
		return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0);
	}

	InsertMenu(hMenu, uMenuIndex, MF_BYPOSITION, uidFirstCmd, _T("&Select Skin"));

	HBITMAP hBitmap;
	hBitmap=::LoadBitmap(_Module.GetModuleInstance(), MAKEINTRESOURCE(IDB_MENU_ICON));
	::SetMenuItemBitmaps(hMenu, uMenuIndex, MF_BYPOSITION, hBitmap, hBitmap);
	
	return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 1);
}

HRESULT CExplorerSkin::GetCommandString(UINT  idCmd,
										UINT  uFlags,
										UINT* pwReserved,
										LPSTR pszName,
										UINT  cchMax)
{
	USES_CONVERSION;

	if (idCmd!=0)
		return E_INVALIDARG;

	if (uFlags & GCS_HELPTEXT)
	{
		LPCTSTR szText=_T("Change your IE skin by this bitmap.");

		if (uFlags & GCS_UNICODE)
			lstrcpynW((LPWSTR) pszName, T2CW(szText), cchMax);
		else
			lstrcpynA(pszName, T2CA(szText), cchMax);

		return S_OK;
	}

	return E_INVALIDARG;
}

HRESULT CExplorerSkin::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo)
{
	if (HIWORD(pCmdInfo->lpVerb)!=0)
		return E_INVALIDARG;

	switch (LOWORD(pCmdInfo->lpVerb))
	{
		case 0:
		{//*******************************
			HKEY hKey;
			if (RegOpenKeyEx(HKEY_CURRENT_USER, 
				"Software\\Microsoft\\Internet Explorer\\Toolbar",
				0,
				KEY_ALL_ACCESS,
				&hKey)!=ERROR_SUCCESS)
			{
				return E_INVALIDARG;
			}


			RegSetValueEx(hKey, "BackBitmap", 0, REG_SZ, (BYTE*) m_szFile, _tcsclen(m_szFile));
			RegCloseKey(hKey);
			::MessageBox(NULL, "Open new explorer to see what happend!", 
				"IESkin",
				MB_OK | MB_ICONINFORMATION);

			return S_OK;
		}

		default:
			return E_INVALIDARG;
			break;
	}
}

⌨️ 快捷键说明

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