ptproc.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 1,577 行 · 第 1/3 页
C
1,577 行
// Set the text background and foreground colors to the
// standard window colors
text=SetTextColor(di->hDC, GetSysColor(COLOR_MENUTEXT));
back=SetBkColor(di->hDC, GetSysColor(COLOR_MENU));
}
mode = SetBkMode(di->hDC, TRANSPARENT);
ImageList_Draw(hIml,pmi->uIcon,
di->hDC,
di->rcItem.left+4,
di->rcItem.top+s_uBitmapPos,
ILD_TRANSPARENT);
// add the menu margin offset
di->rcItem.left += GetSystemMetrics(SM_CXMENUCHECK)+12;
oldhfont = (HFONT)SelectObject(di->hDC, s_hFontMenu);
// if disabled, draw "etched" text by drawing first
// in white offset by 1 pixel, then in gray
if((BOOL)(di->itemState & ODS_DISABLED))
{
if (!(BOOL)(di->itemState & ODS_SELECTED))
{
SetTextColor (di->hDC, GetSysColor(COLOR_3DHILIGHT));
di->rcItem.left++;
di->rcItem.top++;
di->rcItem.bottom++;
DrawText(di->hDC,pmi->szString,
-1, &di->rcItem, DT_SINGLELINE|DT_VCENTER|DT_LEFT);
di->rcItem.left--;
di->rcItem.top--;
di->rcItem.bottom--;
}
SetTextColor (di->hDC, GetSysColor(COLOR_GRAYTEXT));
}
// draw the text left aligned and vertically centered
DrawText(di->hDC,pmi->szString,
-1, &di->rcItem, DT_SINGLELINE|DT_VCENTER|DT_LEFT);
SelectObject(di->hDC, oldhfont);
SetBkMode(di->hDC, mode);
SetTextColor(di->hDC, text);
SetBkColor(di->hDC, back);
}
BOOL InPGPOperation = FALSE;
BOOL bInitingServices = TRUE;
static VOID
sHandlePrefsChange (HWND hwnd)
{
PGPPrefRef prefref;
PGPError err;
// handle wipe on delete-related messages
if ((!PGPclRunningUnderTerminalServer ())&&
(!bInitingServices)) // WOD has to be initialized first
PTHandleWipeOnDeletePrefsMsg(hwnd);
err=PGPclPeekClientLibPrefRefs(&prefref,NULL);
if(IsntPGPError(err))
{
if (IsntPGPError (PGPGetPrefBoolean (prefref,
kPGPPrefShowTrayIcon, &s_bIconEnabled)))
{
sUpdateTrayIconAndText (hwnd, FALSE);
}
// hotkeys pref handler should be called last
// since it will close prefs and free prefref
PTHandleHotKeyPrefsChange(hwnd, PGPsc, prefref);
// the PGPdisk prefs handler does not follow
// the rules (i.e. it can invalidate the prefref),
// so we treat it separately
PGPclPeekClientLibPrefRefs(&prefref,NULL);
PTHandleDiskPrefsChange(hwnd, prefref);
}
}
void WMCreatePostServiceInit(HWND hwnd)
{
// perform PGPdisk initialization
if (PGPdiskExists)
{
PTDiskStartup ();
PTDiskMountStartupDisks (hwnd);
}
// start PGPdisk timer to unmount timed-out disks
if (PGPdiskExists)
SetTimer(hwnd, PGPDISK_TIMER_ID, PGPDISK_TIMER_MS, NULL);
// start timer to query passphrase cache every so often,
// just in case the notifications get out of sync
SetTimer(hwnd, PGPPASSPHRASE_TIMER_ID, PGPPASSPHRASE_TIMER_MS, NULL);
// initialize auto update thread
PTStartAutoUpdater ();
// load up prefs and set icons
sHandlePrefsChange (hwnd);
}
static void
sSDKNotificationCallback (
PGPUserValue userval,
PGPNotificationReason reason,
PGPUInt32 uParam1,
PGPUInt32 uParam2)
{
if (reason == kPGPNotification_PassphraseCacheChanged)
{
PostMessage ((HWND)userval, WM_APP, 0, 0);
}
}
LRESULT CALLBACK EnclyptorProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
static char HelpFile[MAX_PATH + 1] = "\0";
static HWND hwndFocus;
if(!bInitingServices)
{
// check for changed prefs
if(msg == g_uReloadPrefsMsg)
sHandlePrefsChange(hwnd);
// check for hotkey-related messages
PTCheckForHotKeyMsg(hwnd,PGPsc,msg);
// check for PGPdisk-related messages
PTCheckForDiskMsg(hwnd,msg,wParam,lParam);
if(msg == g_uTaskbarRestart)
sUpdateTrayIconAndText(hwnd, TRUE);
}
if((bInitingServices)&&(msg!=WM_CREATE))
return DefWindowProc(hwnd, msg, wParam, lParam);
switch(msg)
{
case WM_CREATE:
{
PGPclWindowsGenus genus;
InitCommonControls();
sGetMenuFont ();
// See which menu items to install
PGPdiskExists=PGPclIsComponentInstalled (kPGPclPGPdisk);
PGPtoolsExists=PGPclIsComponentInstalled (kPGPclPGPtools);
PGPkeysExists=PGPclIsComponentInstalled (kPGPclPGPkeys);
// PGPdisk only in biz and pp versions
/* if(PGPclIsAuthorized())
{
PGPdiskExists=FALSE;
}*/
LoadString(g_hinst, IDS_PGPTOOLS, miTools.szString, sizeof(miTools.szString));
LoadString(g_hinst, IDS_PGPDISK, miDisk.szString, sizeof(miDisk.szString));
LoadString(g_hinst, IDS_PGPKEYS, miKeys.szString, sizeof(miKeys.szString));
miKeys.uIcon=IDX_PGPKEYS;
miTools.uIcon=IDX_PGPTOOLS;
miDisk.uIcon=IDX_PGPDISK;
PGPtrayCreateImageLists (&hIml,&hImlHeader,&hImlDiskHeader);
// Load up default PGPtray icon
PGPclGetWindowsVersion (NULL, &genus, NULL);
if (genus == kPGPclWindowsGenusMillenium)
{
// Me can display hi-color icons in the system tray,
g_hIconTrayDefault =
LoadImage (g_hinst, MAKEINTRESOURCE(IDI_TRAYICON8),
IMAGE_ICON, 0, 0, 0);
g_hIconTrayCached =
LoadImage (g_hinst, MAKEINTRESOURCE(IDI_TRAYICONCACHED8),
IMAGE_ICON, 0, 0, 0);
s_bDrawDividerLine = TRUE;
}
else if (genus >= kPGPclWindowsGenusXp)
{
// XP can display > 32-bit icons in the system tray,
g_hIconTrayDefault =
LoadImage (g_hinst, MAKEINTRESOURCE(IDI_TRAYICON32),
IMAGE_ICON, 0, 0, 0);
g_hIconTrayCached =
LoadImage (g_hinst, MAKEINTRESOURCE(IDI_TRAYICONCACHED32),
IMAGE_ICON, 0, 0, 0);
s_bDrawDividerLine = FALSE;
}
else
{
// otherwise we need to use the 16 color
g_hIconTrayDefault =
LoadImage (g_hinst, MAKEINTRESOURCE(IDI_TRAYICON4),
IMAGE_ICON, 0, 0, 0);
g_hIconTrayCached =
LoadImage (g_hinst, MAKEINTRESOURCE(IDI_TRAYICONCACHED4),
IMAGE_ICON, 0, 0, 0);
s_bDrawDividerLine = TRUE;
}
sUpdateTrayIconAndText (hwnd, FALSE);
// register callback to get passphrase cache change notifications
PGPSetNotificationCallback (sSDKNotificationCallback, hwnd);
return 0;
}
case WM_APP:
{
sUpdateTrayIconAndText (hwnd, FALSE);
return 0;
}
case WM_HOTKEY:
{
PTProcessHotKey(hwnd, PGPsc, wParam);
return TRUE;
}
case WM_TIMER :
{
switch (wParam)
{
case PGPDISK_TIMER_ID:
PTDiskCheckForTimedOutDisks(hwnd);
break;
case PGPPASSPHRASE_TIMER_ID:
PostMessage (hwnd, WM_APP, 0, 0);
break;
}
return 0;
}
case WM_DRAWITEM:
{
DrawMenuItem((LPDRAWITEMSTRUCT)lParam);
return TRUE;
}
case WM_MEASUREITEM:
{
MeasureMenuItem((LPMEASUREITEMSTRUCT)lParam);
return TRUE;
}
case WM_QUERYOPEN:
{
return 0;
}
case WM_USERCHANGED:
{
PGPPurgePassphraseCache (PGPsc);
PGPPurgeKeyDBCache (PGPsc);
return 0;
}
case WM_MENUSELECT:
{
return 0;
}
case WM_TASKAREA_MESSAGE:
{
UINT uID = (UINT) wParam;
UINT uMouseMsg = (UINT) lParam;
if(uMouseMsg == WM_RBUTTONDOWN)
{
switch(uID)
{
case 1:
{
PopupTaskbarMenu(hwnd, InPGPOperation);
return 0;
}
}
}
else if(uMouseMsg == WM_LBUTTONDOWN)
{
switch(uID)
{
case 1:
{
PopupTaskbarMenu(hwnd, InPGPOperation);
return 0;
}
}
}
break;
}
case WM_COMMAND:
{
// Menu is greyed, but just in case hot keys are sending
// messages
if(InPGPOperation)
break;
switch(LOWORD(wParam))
{
case ID_PURGECACHES:
{
InPGPOperation = TRUE;
PTProcessHotKey(hwnd, PGPsc, kPurgePassphraseCache);
InPGPOperation = FALSE;
break;
}
case ID_ENCRYPTCLIPBOARD:
{
InPGPOperation = TRUE;
PGPscEncryptClipboard(hwnd, szApp, PGPsc, PGPtls, TRUE, FALSE, FALSE);
InPGPOperation = FALSE;
break;
}
case ID_SIGNCLIPBOARD:
{
InPGPOperation = TRUE;
PGPscEncryptClipboard(hwnd, szApp, PGPsc,PGPtls, FALSE, TRUE, FALSE);
InPGPOperation = FALSE;
break;
}
case ID_ENCRYPTSIGNCLIPBOARD:
{
InPGPOperation = TRUE;
PGPscEncryptClipboard(hwnd, szApp, PGPsc,PGPtls, TRUE, TRUE, FALSE);
InPGPOperation = FALSE;
break;
}
case ID_DECRYPTVERIFYCLIPBOARD:
{
InPGPOperation = TRUE;
PGPscDecryptClipboard(hwnd, szApp, PGPsc,PGPtls);
InPGPOperation = FALSE;
break;
}
case ID_ENCRYPTWINDOW:
{
BOOL bStartingCR;
InPGPOperation = TRUE;
if(PGPscDoCopy(hwnd,PGPsc,TRUE,&hwndFocus,&bStartingCR))
{
if(PGPscEncryptClipboard(hwnd, szApp, PGPsc, PGPtls, TRUE, FALSE, bStartingCR))
PGPscDoPaste(TRUE,hwndFocus);
else
PGPscDoFocus(TRUE,hwndFocus);
}
InPGPOperation = FALSE;
break;
}
case ID_SIGNWINDOW:
{
BOOL bStartingCR;
InPGPOperation = TRUE;
if(PGPscDoCopy(hwnd,PGPsc,TRUE,&hwndFocus,&bStartingCR))
{
if(PGPscEncryptClipboard(hwnd, szApp, PGPsc,PGPtls, FALSE, TRUE, bStartingCR))
PGPscDoPaste(TRUE,hwndFocus);
else
PGPscDoFocus(TRUE,hwndFocus);
}
InPGPOperation = FALSE;
break;
}
case ID_ENCRYPTSIGNWINDOW:
{
BOOL bStartingCR;
InPGPOperation = TRUE;
if(PGPscDoCopy(hwnd,PGPsc,TRUE,&hwndFocus,&bStartingCR))
{
if(PGPscEncryptClipboard(hwnd, szApp, PGPsc,PGPtls, TRUE, TRUE, bStartingCR))
PGPscDoPaste(TRUE,hwndFocus);
else
PGPscDoFocus(TRUE,hwndFocus);
}
InPGPOperation = FALSE;
break;
}
case ID_DECRYPTVERIFYWINDOW:
{
BOOL bStartingCR;
InPGPOperation = TRUE;
if(PGPscDoCopy(hwnd,PGPsc,TRUE,&hwndFocus,&bStartingCR))
{
PGPscDecryptClipboard(hwnd, szApp, PGPsc,PGPtls);
PGPscDoFocus(TRUE,hwndFocus);
}
InPGPOperation = FALSE;
break;
}
case ID_ABOUTPGP:
{
InPGPOperation = TRUE;
PGPclHelpAbout (PGPsc, hwnd, NULL, NULL, NULL);
InPGPOperation = FALSE;
break;
}
case ID_WIPECLIP:
{
InPGPOperation = TRUE;
PGPscEraseClipboard(hwnd,PGPsc);
InPGPOperation = FALSE;
break;
}
case ID_VIEWCLIPBOARD:
{
InPGPOperation = TRUE;
PGPscClipboardEditor(PGPsc,hwnd);
InPGPOperation = FALSE;
break;
}
case ID_LAUNCHPGPKEYS:
{
InPGPOperation = TRUE;
PGPscDoLaunchKeys(hwnd);
InPGPOperation = FALSE;
break;
}
case ID_LAUNCHPGPTOOLS:
{
InPGPOperation = TRUE;
PGPscDoLaunchTools(hwnd);
InPGPOperation = FALSE;
break;
}
case ID_PGPDISKMOUNTDISK:
{
InPGPOperation = TRUE;
PTDiskOperation(hwnd, PGPDISK_MOUNTDISK);
InPGPOperation = FALSE;
break;
}
case ID_PGPDISKNEWDISK:
{
InPGPOperation = TRUE;
PTDiskOperation(hwnd, PGPDISK_NEWDISK);
InPGPOperation = FALSE;
break;
}
case ID_PGPDISKEDITDISK:
{
InPGPOperation = TRUE;
PTDiskOperation(hwnd, PGPDISK_EDITDISK);
InPGPOperation = FALSE;
break;
}
case ID_PGPDISKUNMOUNTALL:
{
InPGPOperation = TRUE;
PTDiskOperation(hwnd, PGPDISK_UNMOUNTALL);
InPGPOperation = FALSE;
break;
}
case ID_PROPERTIES:
{
InPGPOperation = TRUE;
PGPscPreferences(hwnd, PGPsc,PGPtls);
InPGPOperation = FALSE;
break;
}
case ID_QUIT_ENCLYPTOR:
{
InPGPOperation = TRUE;
#if !PGP_DEBUG
// Hide it
{
PGPPrefRef prefref;
if(IsntPGPError(PGPclPeekClientLibPrefRefs(&prefref,NULL)))
{
PGPSetPrefBoolean (prefref,kPGPPrefShowTrayIcon, FALSE);
PGPclFlushClientLibPrefs (prefref, NULL);
}
}
#else
// Quit it
if (CheckIfOKToClose(hwnd))
{
DWORD dwVersion;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?