📄 fileencrpty.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 + -