📄 commands.cpp
字号:
/*____________________________________________________________________________
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 + -