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

📄 commands.cpp

📁 vc环境下的pgp源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*____________________________________________________________________________
	Copyright (C) 1997 Network Associates Inc. and affiliated companies.
	All rights reserved.
	
	


	$Id: Commands.cpp,v 1.41.2.1 1999/06/01 14:11:03 dgal Exp $



____________________________________________________________________________*/
#include "stdinc.h"
#include "Exchange.h"
#include "resource.h"
#include "AddKey.h"
#include "EncryptSign.h"
#include "DecryptVerify.h"
#include "Prefs.h"
#include "Recipients.h"
#include "RichEdit_IO.h"
#include "BlockUtils.h"
#include "UIutils.h"

#include "pgpConfig.h"
#include "pgpOptionList.h"
#include "pgpUtilities.h"
#include "pgpSDKPrefs.h"
#include "pgpMem.h"
#include "PGPcl.h"
#include "PGPsc.h"

typedef struct {
		HWND hwndFound;
		int yMax;
		BOOL bInternetExplorer;
		BOOL bMicrosoftWord;
} FindStruct;

static HWND FindMessageWindow(IExchExtCallback* pmecb, FindStruct *fs);
BOOL CALLBACK ReportChildren(HWND hwnd, LPARAM lParam);


STDMETHODIMP CExtImpl::InstallCommands(IExchExtCallback* pmecb, 
                            HWND hWnd, HMENU hMenu,
                            UINT * pcmdidBase, LPTBENTRY lptbeArray,
                            UINT ctbe, ULONG ulFlags)
{
	if ((EECONTEXT_READNOTEMESSAGE != _context) && 
		(EECONTEXT_SENDNOTEMESSAGE != _context) &&
		(EECONTEXT_VIEWER != _context))
		return S_FALSE;

	// First, the menu

	HMENU hmenuTools;
	HMENU hmenuHelp;
	HMENU hmenuHelpTopics;
	ULONG ulBeforeTools;
	ULONG ulAfterExchange;
	HRESULT hr = pmecb->GetMenuPos(EECMDID_Tools, &hmenuTools, 
									&ulBeforeTools, NULL, 0);
	if (S_OK != hr)
		return S_FALSE; // No such menu item?  Very bad.
	hr = pmecb->GetMenuPos(EECMDID_HelpAboutMicrosoftExchange, &hmenuHelp,
							NULL, NULL, 0);
	if (S_OK != hr)
		return S_FALSE; // No such menu item?  Very bad.
	hr = pmecb->GetMenuPos(EECMDID_HelpMicrosoftExchangeHelpTopics, 
							&hmenuHelpTopics, NULL, &ulAfterExchange, 0);
	if (S_OK != hr)
		return S_FALSE; // No such menu item?  Very bad.

	char szCommand[80];
	
	_hmenuPGP = CreatePopupMenu();
	InsertMenu(hmenuTools, ulBeforeTools, 
				MF_BYPOSITION | MF_STRING | MF_POPUP, 
				(UINT) _hmenuPGP, "&PGP");

	if (_context == EECONTEXT_SENDNOTEMESSAGE)
	{
		UIGetString(szCommand, sizeof(szCommand), IDS_ENCRYPT_MENU);
		AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
		_cmdidEncrypt = *pcmdidBase;
 		++(*pcmdidBase);

		UIGetString(szCommand, sizeof(szCommand), IDS_SIGN_MENU);
		AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
		_cmdidSign = *pcmdidBase;
 		++(*pcmdidBase);

		AppendMenu(_hmenuPGP, MF_SEPARATOR, 0, NULL);
		
		UIGetString(szCommand, sizeof(szCommand), IDS_ENCRYPTNOW_MENU);
		AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
		_cmdidEncryptNow = *pcmdidBase;
		++(*pcmdidBase);
		
		UIGetString(szCommand, sizeof(szCommand), IDS_SIGNNOW_MENU);
		AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
		_cmdidSignNow = *pcmdidBase;
		++(*pcmdidBase);
		
		UIGetString(szCommand, sizeof(szCommand), IDS_ENCRYPTSIGN_MENU);
		AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
		_cmdidEncryptSign = *pcmdidBase;
		++(*pcmdidBase);
		
		AppendMenu(_hmenuPGP, MF_SEPARATOR, 0, NULL);
	}

	if (_context == EECONTEXT_READNOTEMESSAGE)
	{
		UIGetString(szCommand, sizeof(szCommand), IDS_DECRYPT_MENU);
		AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
		_cmdidDecrypt = *pcmdidBase;
 		++(*pcmdidBase);

		AppendMenu(_hmenuPGP, MF_SEPARATOR, 0, NULL);
	}

	UIGetString(szCommand, sizeof(szCommand), IDS_PGPKEYS_MENU);
	AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
	_cmdidPgpKeys = *pcmdidBase;
	++(*pcmdidBase);

	UIGetString(szCommand, sizeof(szCommand), IDS_PGPPREFS_MENU);
	AppendMenu(_hmenuPGP, MF_STRING, *pcmdidBase, szCommand);
	_cmdidPrefs = *pcmdidBase;
	++(*pcmdidBase);
	
	UIGetString(szCommand, sizeof(szCommand), IDS_PGPHELP_MENU);
	InsertMenu(hmenuHelpTopics, ulAfterExchange, 
				MF_BYPOSITION | MF_STRING, *pcmdidBase, szCommand);
	_cmdidHelp = *pcmdidBase;
	++(*pcmdidBase);
	
	UIGetString(szCommand, sizeof(szCommand), IDS_ABOUT_MENU);
	AppendMenu(hmenuHelp, MF_STRING, *pcmdidBase, szCommand);
	_cmdidAbout = *pcmdidBase;
	++(*pcmdidBase);
	
	// Next, the toolbar

	int tbindx;
	HWND hwndToolbar = NULL;
	for (tbindx = ctbe-1; (int) tbindx > -1; --tbindx)
	{
		if (EETBID_STANDARD == lptbeArray[tbindx].tbid)
		{
			hwndToolbar = lptbeArray[tbindx].hwnd;
			if (_context == EECONTEXT_SENDNOTEMESSAGE)
			{
				_hwndSendToolbar = hwndToolbar;
				_itbbEncrypt = lptbeArray[tbindx].itbbBase++;
				_itbbSign = lptbeArray[tbindx].itbbBase++;
			}

			if (_context == EECONTEXT_READNOTEMESSAGE)
			{
				_hwndReadToolbar = hwndToolbar;
				_itbbDecrypt = lptbeArray[tbindx].itbbBase++;
			}
			
			_itbbPgpKeys = lptbeArray[tbindx].itbbBase++;
			break;
		}
	}

	if (hwndToolbar)
	{
		TBADDBITMAP tbab;

		tbab.hInst = UIGetInstance();
		if (_context == EECONTEXT_SENDNOTEMESSAGE)
		{
			if (_fOutlook98)
				tbab.nID = IDB_T_ENCRYPT;
			else
				tbab.nID = IDB_ENCRYPT;
			_itbmEncrypt = SendMessage(hwndToolbar, TB_ADDBITMAP, 1, 
							(LPARAM)&tbab);

			if (_fOutlook98)
				tbab.nID = IDB_T_SIGN;
			else
				tbab.nID = IDB_SIGN;
			_itbmSign = SendMessage(hwndToolbar, TB_ADDBITMAP, 1, 
							(LPARAM)&tbab);
		}

		if (_context == EECONTEXT_READNOTEMESSAGE)
		{
			if (_fOutlook98)
				tbab.nID = IDB_T_DECRYPT;
			else
				tbab.nID = IDB_DECRYPT;
			_itbmDecrypt = SendMessage(hwndToolbar, TB_ADDBITMAP, 1, 
							(LPARAM)&tbab);
		}

		if (_fOutlook98)
			tbab.nID = IDB_T_PGPKEYS;
		else
			tbab.nID = IDB_PGPKEYS;
		_itbmPgpKeys = SendMessage(hwndToolbar, TB_ADDBITMAP, 1, 
						(LPARAM)&tbab);

	}

	return S_OK;
}


STDMETHODIMP CExtImpl::QueryButtonInfo (ULONG tbid, UINT itbb, 
                            LPTBBUTTON ptbb, LPTSTR lpsz, UINT cch, 
                            ULONG ulFlags)
{
	if ((EECONTEXT_READNOTEMESSAGE != _context) &&
		(EECONTEXT_SENDNOTEMESSAGE != _context) &&
		(EECONTEXT_VIEWER != _context))
		return S_FALSE;

	HRESULT hr = S_FALSE;

	if ((itbb == _itbbEncrypt) && (_context == EECONTEXT_SENDNOTEMESSAGE))
	{
		ptbb->iBitmap = _itbmEncrypt;
		ptbb->idCommand = _cmdidEncrypt;
		ptbb->fsState = TBSTATE_ENABLED;
		ptbb->fsStyle = TBSTYLE_CHECK;
		ptbb->dwData = 0;
		ptbb->iString = -1;

		UIGetString(lpsz, cch, IDS_ENCRYPT_TOOLTIP);
		hr = S_OK;
	}

	if ((itbb == _itbbSign) && (_context == EECONTEXT_SENDNOTEMESSAGE))
	{
		ptbb->iBitmap = _itbmSign;
		ptbb->idCommand = _cmdidSign;
		ptbb->fsState = TBSTATE_ENABLED;
		ptbb->fsStyle = TBSTYLE_CHECK;
		ptbb->dwData = 0;
		ptbb->iString = -1;

		UIGetString(lpsz, cch, IDS_SIGN_TOOLTIP);
		hr = S_OK;
	}

	if (itbb == _itbbPgpKeys)
	{
		ptbb->iBitmap = _itbmPgpKeys;
		ptbb->idCommand = _cmdidPgpKeys;
		ptbb->fsState = TBSTATE_ENABLED;
		ptbb->fsStyle = TBSTYLE_BUTTON;
		ptbb->dwData = 0;
		ptbb->iString = -1;

		UIGetString(lpsz, cch, IDS_PGPKEYS_TOOLTIP);
		hr = S_OK;
	}

	if ((itbb == _itbbDecrypt) && (_context == EECONTEXT_READNOTEMESSAGE))
	{
		ptbb->iBitmap = _itbmDecrypt;
		ptbb->idCommand = _cmdidDecrypt;
		ptbb->fsState = TBSTATE_ENABLED;
		ptbb->fsStyle = TBSTYLE_BUTTON;
		ptbb->dwData = 0;
		ptbb->iString = -1;

		UIGetString(lpsz, cch, IDS_DECRYPT_TOOLTIP);
		hr = S_OK;
	}


	return hr;
}


STDMETHODIMP CExtImpl::ResetToolbar(ULONG tbid, ULONG ulFlags)
{
	// To implement this method,
	// the extension must cache the results of a prior call
	// to IExchExtCallback::GetToolbar.

	return S_FALSE;
}


STDMETHODIMP CExtImpl::QueryHelpText(UINT cmdid, ULONG ulFlags, 
                                      LPTSTR psz, UINT cch)
{
	if ((EECONTEXT_READNOTEMESSAGE != _context) &&
		(EECONTEXT_SENDNOTEMESSAGE != _context) &&
		(EECONTEXT_VIEWER != _context))
		return S_FALSE;

	if (ulFlags == EECQHT_STATUS)
	{
		if ((cmdid == _cmdidEncrypt) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_ENCRYPT_STATUS);
			return S_OK;
		}

		if ((cmdid == _cmdidSign) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_SIGN_STATUS);
			return S_OK;
		}

		if ((cmdid == _cmdidEncryptNow) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_ENCRYPTNOW_STATUS);
			return S_OK;
		}

		if ((cmdid == _cmdidSignNow) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_SIGNNOW_STATUS);
			return S_OK;
		}

		if ((cmdid == _cmdidEncryptSign) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_ENCRYPTSIGN_STATUS);
			return S_OK;
		}

		if ((cmdid == _cmdidDecrypt) && 
			(_context == EECONTEXT_READNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_DECRYPT_STATUS);
			return S_OK;
		}

		if (cmdid == _cmdidPgpKeys)
		{
			UIGetString(psz, cch, IDS_PGPKEYS_STATUS);
			return S_OK;
		}

		if (cmdid == _cmdidPrefs)
		{
			UIGetString(psz, cch, IDS_PGPPREFS_STATUS);
			return S_OK;
		}

		if (cmdid == _cmdidHelp)
		{
			UIGetString(psz, cch, IDS_PGPHELP_STATUS);
			return S_OK;
		}

		if (cmdid == _cmdidAbout)
		{
			UIGetString(psz, cch, IDS_ABOUT_STATUS);
			return S_OK;
		}

	}
	else if (ulFlags == EECQHT_TOOLTIP)
	{
		if ((cmdid == _cmdidEncrypt) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_ENCRYPT_TOOLTIP);
			return S_OK;
		}

		if ((cmdid == _cmdidSign) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_SIGN_TOOLTIP);
			return S_OK;
		}

		if ((cmdid == _cmdidEncryptNow) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_ENCRYPTNOW_TOOLTIP);
			return S_OK;
		}

		if ((cmdid == _cmdidSignNow) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_SIGNNOW_TOOLTIP);
			return S_OK;
		}

		if ((cmdid == _cmdidEncryptSign) && 
			(_context == EECONTEXT_SENDNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_ENCRYPTSIGN_TOOLTIP);
			return S_OK;
		}

		if ((cmdid == _cmdidDecrypt) && 
			(_context == EECONTEXT_READNOTEMESSAGE))
		{
			UIGetString(psz, cch, IDS_DECRYPT_TOOLTIP);
			return S_OK;
		}

		if (cmdid == _cmdidPgpKeys)
		{
			UIGetString(psz, cch, IDS_PGPKEYS_TOOLTIP);
			return S_OK;
		}
	}

	return S_FALSE;
}


STDMETHODIMP CExtImpl::Help(IExchExtCallback* pmecb, UINT cmdid)
{
	return S_FALSE;
}


STDMETHODIMP_(VOID) CExtImpl::InitMenu(IExchExtCallback* pmecb)
{
	FindStruct fs;
	HWND hwndMain;
	HWND hwndToolbar;
	HRESULT hr;

	if ((EECONTEXT_READNOTEMESSAGE != _context) &&
		(EECONTEXT_SENDNOTEMESSAGE != _context))
		return;

	pmecb->GetWindow(&hwndMain);
	_hwndMessage = FindMessageWindow(pmecb, &fs);

	hr = pmecb->GetToolbar(EETBID_STANDARD, &hwndToolbar);
	if (hr != S_OK)
		return;

	if (fs.bInternetExplorer || fs.bMicrosoftWord)
	{
		if (_context == EECONTEXT_SENDNOTEMESSAGE)
		{
			DeleteMenu(_hmenuPGP, _cmdidEncryptNow, MF_BYCOMMAND);
			DeleteMenu(_hmenuPGP, _cmdidSignNow, MF_BYCOMMAND);
			DeleteMenu(_hmenuPGP, _cmdidEncryptSign, MF_BYCOMMAND);
			DrawMenuBar(hwndMain);
		}

		if (_context == EECONTEXT_READNOTEMESSAGE)
		{
			DeleteMenu(_hmenuPGP, _cmdidDecrypt, MF_BYCOMMAND);
			DrawMenuBar(hwndMain);

			SendMessage(hwndToolbar, TB_ENABLEBUTTON, 
				_cmdidDecrypt, MAKELONG(FALSE, 0));
		}
	}

⌨️ 快捷键说明

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