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

📄 fileencrpty.cpp

📁 COM 组建的开发
💻 CPP
字号:
// FileEncrpty.cpp : Implementation of CFileEncrpty
#include "stdafx.h"
#include "FileEnc.h"
#include "FileEncrpty.h"
#include "DlgEncryptConfg.h"
#include "DlgEncPorgress.h"
#include "DlgRecoveSet.h"
#include "DlgRecoveProgress.h"
/////////////////////////////////////////////////////////////////////////////
// CFileEncrpty


STDMETHODIMP CFileEncrpty::Initialize(LPCITEMIDLIST pIDFolder, LPDATAOBJECT pDataObj, HKEY hRegKey)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	// 如果禁用则不再显示功能菜单 [5/7/2008 By willing]
	CConfig Config;
	if (FALSE == Config.IsUse())
	{
		OutputDebugString("文件加密功能被禁用");
		return S_OK;
	}
	// 清空所选文件链表 [5/7/2008 By willing]
	g_SelectFileList.RemoveAll();
	
	char m_pszPath[MAX_PATH];
	memset(m_pszPath,0,MAX_PATH);
	FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; 
	STGMEDIUM stg = { TYMED_HGLOBAL };
	HDROP hDrop = NULL;
	if ( FAILED( pDataObj->GetData ( &fmt, &stg ))) 
	{ 
		return E_INVALIDARG; 
	}
	// 获得指向实际数据的指针
	hDrop = (HDROP) GlobalLock ( stg.hGlobal );
	// 检查非NULL. 
	if ( NULL == hDrop ) 
	{ 
		return E_INVALIDARG;
	}
	// 获取所选文件的数量 [5/7/2008 By willing]
	UINT uNumFiles = DragQueryFile ( hDrop, 0xFFFFFFFF, NULL, 0 ); 
	if ( 0 == uNumFiles )
	{ 
		GlobalUnlock ( stg.hGlobal );
		ReleaseStgMedium ( &stg ); 
		return E_INVALIDARG; 
	} 
	for (UINT i = 0;i<uNumFiles;i++)
	{
		DragQueryFile((HDROP)stg.hGlobal, i, m_pszPath, sizeof(m_pszPath));
		CSelectFile SelectFile;
		SelectFile.SetFilePatchName(CString(m_pszPath));
		if (SelectFile.IsFile())
		{
			g_SelectFileList.AddItem(SelectFile);
		}
	}
	return S_OK;
}
// 在用户在文件上点击右键后,弹出菜单前,加入我们的功能菜单 [5/23/2007 Add By willing]
HRESULT CFileEncrpty::QueryContextMenu(HMENU hmenu,
									UINT indexMenu,
									UINT idCmdFirst,
									UINT idCmdLast,
									UINT uFlags)
{
	// 如果 CMF_DEFAULTONLY 标志被设置我们不作任何操作. 
	if ( uFlags & CMF_DEFAULTONLY ) 
	{ 
		return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 0 ); 
	} 

	CConfig Config;
	if (FALSE == Config.IsUse())
	{
		return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 0 );
	}

	if(!(CMF_DEFAULTONLY & uFlags))
    {
		UINT uCmd = idCmdFirst;
		TCHAR szMenu[MAX_PATH] = {0};
		// 在右键菜单中插入我们的菜单 [9/5/2006 Add by willing]
		//前后分别插入两个分割条
		InsertMenu(hmenu, indexMenu, MF_SEPARATOR| MF_BYPOSITION, uCmd++, szMenu);
		// 添加“加密文件”菜单项 [5/6/2008 By willing]
		LoadString(_Module.GetModuleInstance(), IDM_SRC_COUNT, szMenu, MAX_PATH);
        InsertMenu(hmenu, indexMenu+1, MF_STRING | MF_BYPOSITION, uCmd++, szMenu);
		// 添加“还原文件”菜单项 [5/6/2008 By willing]
		LoadString(_Module.GetModuleInstance(), IDM_REVERT_STRING, szMenu, MAX_PATH);
		InsertMenu(hmenu, indexMenu+2, MF_STRING | MF_BYPOSITION, uCmd++, szMenu);
		
		// 插入分割条 [5/6/2008 By willing]
		InsertMenu(hmenu, indexMenu+3, MF_SEPARATOR| MF_BYPOSITION, uCmd++, szMenu);

		// 告诉浏览器我们一共添加了几个菜单项 [9/8/2006 Add by willing]
		return MAKE_HRESULT( SEVERITY_SUCCESS, FACILITY_NULL, 4 );
    }

    return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
}
// 在状态栏上显示提示信息 [5/6/2008 By willing]
HRESULT CFileEncrpty::GetCommandString ( UINT idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax )
{
	CConfig Config;
	if (FALSE == Config.IsUse())
	{
		return S_OK;
	}
	TCHAR szDes[MAX_PATH];
	memset(szDes,0,MAX_PATH);
	TCHAR szRev[MAX_PATH] = {0};//还原命令提示
	memset(szRev,0,MAX_PATH);
	TCHAR szEnc[MAX_PATH] = {0};//加密命令提示
	memset(szEnc,0,MAX_PATH);
	LPWSTR wszDes = NULL;
	
	LoadString(_Module.GetModuleInstance(), IDS_SRC_COUNT, szEnc, MAX_PATH);	
	LoadString(_Module.GetModuleInstance(), IDM_REVERT_COUNT, szRev, MAX_PATH);
	if ( uFlags & GCS_HELPTEXT )
	{
		switch(idCmd)
		{
		case 0:
			return E_INVALIDARG;
			break;
		case 1:
			sprintf(szDes,"%s",szEnc);
			break;
		case 2:
			sprintf(szDes,"%s",szRev);
			break;
		case 3:
			return E_INVALIDARG;
			break;
		default:
			return E_INVALIDARG;
			break;
		}

		if ( uFlags & GCS_UNICODE )
		{
			// 在explorer的状态栏上显示提示信息 [5/23/2007 Add By willing]
			MultiByteToWideChar(CP_ACP, 0, (char *)szDes, -1, wszDes, MAX_PATH);
			lstrcpynW((LPWSTR)pszName, wszDes, cchMax); 
		}
		else
		{
			lstrcpynA ( pszName, T2CA(szDes), cchMax );
		}

	}
	return S_OK;
}
// 执行用户的选择(用户点击了我们添加的菜单) [5/6/2008 By willing]
HRESULT CFileEncrpty::InvokeCommand ( LPCMINVOKECOMMANDINFO pCmdInfo )
{
	CConfig Config;
	if (FALSE == Config.IsUse())
	{
		return S_OK;
	}
	// 如果 lpVerb 指向一字符串, 忽略此次调用. 
	if ( 0 != HIWORD( pCmdInfo->lpVerb ))
		return E_INVALIDARG;
	switch ( LOWORD( pCmdInfo->lpVerb )) 
	{ 
	case 0: 
		return E_INVALIDARG; 
		break;
	case 1:
		// 开始执行加密 [5/7/2008 By willing]
		ShowDlg(TRUE);
		break;
	case 2:
		// 开始执行还原 [5/7/2008 By willing]
		ShowDlg(FALSE);
		break;
	case 3:
		return E_INVALIDARG; 
		break;
	default: 
		return E_INVALIDARG; 
		break; 
	}
	return S_OK;
}


STDMETHODIMP CFileEncrpty::ShowDlg(BOOL bIsEnc)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	// TODO: Add your implementation code here
	if (bIsEnc)
	{
		// 显示加密对话框 [5/7/2008 By willing]
		CDlgEncryptConfg DlgEncryptConfg;
		int nReCode = DlgEncryptConfg.DoModal();
		if (IDCANCEL == nReCode)
		{
			g_SelectFileList.RemoveAll();// 清空所选文件链表 [5/7/2008 By willing]
			return S_OK;
		}
		CDlgEncPorgress DlgEncPorgress;
		DlgEncPorgress.m_strPwd = DlgEncryptConfg.m_strPwd;
		DlgEncPorgress.m_nEncSuanFa = DlgEncryptConfg.m_nEncSuanFa;
		DlgEncPorgress.m_dwEncType = DlgEncryptConfg.m_dwEncType;
		nReCode = DlgEncPorgress.DoModal();
		// 根据对话框的返回值,做不同的处理 [5/7/2008 By willing]
	}else{
		// 显示还原对话框 [5/7/2008 By willing]
		CDlgRecoveSet DlgRecoveSet;
		if (IDCANCEL == DlgRecoveSet.DoModal())
		{
			return S_OK;
		}
		CDlgRecoveProgress DlgRecoveProgress;
		DlgRecoveProgress.SetPwd(DlgRecoveSet.m_strPwd);
		DlgRecoveProgress.DoModal();
	}
	return S_OK;
}

⌨️ 快捷键说明

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