ptproc.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 1,577 行 · 第 1/3 页
C
1,577 行
dwVersion = MAKELONG (
MAKEWORD (PGPVERSIONSUBMINOR, PGPVERSIONMINOR),
MAKEWORD (PGPVERSIONMAJOR, 0));
SetForegroundWindow(hwnd);
PostMessage(hwnd, WM_CLOSE, 0, dwVersion);
}
#endif // !PGPDEBUG
InPGPOperation = FALSE;
break;
}
case ID_HELP_GENERAL:
{
InPGPOperation = TRUE;
PGPclHtmlHelp (hwnd, kPGPclHelpContentsAndIndex, 0, 0,
(char*)kPGPclHelpFile, NULL);
InPGPOperation = FALSE;
break;
}
/*
///>>> 30sep02 pbj :
consolidated all help into single *.chm file and so only
one TOC exists. Thus, merge all help into one menu item.
case ID_HELP_MAIL:
{
InPGPOperation = TRUE;
PGPclHtmlHelp (hwnd, kPGPclHelpContentsAndIndex, 0, 0,
(char*)kPGPclMailHelpFile, NULL);
InPGPOperation = FALSE;
break;
}
case ID_HELP_DISK:
{
InPGPOperation = TRUE;
PGPclHtmlHelp (hwnd, kPGPclHelpContentsAndIndex, 0, 0,
(char*)kPGPclDiskHelpFile, NULL);
InPGPOperation = FALSE;
break;
}
///<<<
*/
case ID_LICENSE:
{
InPGPOperation = TRUE;
PGPlnLicenseCheck (PGPsc);
if(PGPlnWasAuthorized())
{
PGPclDisplayLicense (PGPsc, NULL);
}
else
{
PGPclEnterLicense(PGPsc,NULL);
}
InPGPOperation = FALSE;
break;
}
}
break;
}
case WM_ENDSESSION :
{
if (wParam)
{
PGPPurgePassphraseCache (PGPsc);
PGPPurgeKeyDBCache (PGPsc);
UninitializeWipeOnDelete();
}
break;
}
case WM_CLOSE:
{
BOOL bOldInstaller = FALSE;
DWORD dwVersion;
dwVersion = MAKELONG (
MAKEWORD (PGPVERSIONSUBMINOR, PGPVERSIONMINOR),
MAKEWORD (PGPVERSIONMAJOR, 0));
// if lParam is < our current version, then the message
// did not come from our current (or subsequent) installer.
// Could be from a previous PGP installer (which we must
// alert user about) or it could be from OS (e.g. Win9x
// sends a WM_CLOSE when attempting to kill an app via
// the task manager). We have to try and figure out where
// the message came from ...
if ((DWORD)lParam < dwVersion)
{
HWND hOldInstaller = NULL;
// if lParam != zero, then the message most likely
// came from our own installer
if (lParam != 0)
bOldInstaller = TRUE;
// otherwise we have to look for Windows suggesting
// that one of our previous installers is running
else
{
if (FindWindow ("isdelete", "InstallSHIELD Delete"))
{
// 6.5.x installers ran from a PGP SDA
if (FindWindow ("PGPsda_Hidden_Window",
"PGPsda_Hidden_Window"))
{
bOldInstaller = TRUE;
hOldInstaller = FindWindow (
"InstallShield_Win", "Setup");
}
// 6.0.x installers had a "PGP ... " window
else
{
hOldInstaller = FindWindow (
"InstallShield_Win", NULL);
if (hOldInstaller)
{
CHAR sz[32];
GetWindowText (hOldInstaller, sz, sizeof(sz));
if (strncmp (sz, "PGP", 3) == 0)
bOldInstaller = TRUE;
else
hOldInstaller = NULL;
}
}
}
}
if (hOldInstaller)
PostMessage (hOldInstaller, WM_CLOSE, 0, 0);
if (bOldInstaller)
{
PTMessageBox (hwnd, IDS_UNINSTALLCAPTION,
IDS_PLEASEUNINSTALL, MB_ICONHAND|MB_OK|
MB_SYSTEMMODAL|MB_SETFOREGROUND);
}
}
if (!bOldInstaller)
{
PTStopAutoUpdater ();
PTRemoveHotKeys(hwnd);
DestroyWindow(hwnd);
}
return 0;
}
case WM_DESTROY:
{
DeleteObject (s_hFontMenu);
PostQuitMessage(0);
return 0;
}
case WM_POWERBROADCAST:
{
if (wParam == PBT_APMSUSPEND)
{
PGPPurgePassphraseCache(PGPsc);
PGPPurgeKeyDBCache(PGPsc);
}
return PTDiskHandlePowerBroadcast(hwnd, wParam, lParam);
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
void InsertOwnerDrawnMenuItem(HMENU hMenu,UINT pos,
UINT id,HMENU hSubMenu,
PPGPMENUINFO pmi,UINT iState)
{
MENUITEMINFO mii;
BOOL result;
memset(&mii,0x00,sizeof(MENUITEMINFO));
mii.cbSize=sizeof(MENUITEMINFO);
mii.fMask=MIIM_TYPE|MIIM_DATA|MIIM_ID|MIIM_STATE|MIIM_SUBMENU;
mii.fType=MFT_OWNERDRAW;
mii.dwItemData=(DWORD)pmi;
mii.wID=id;
mii.fState=iState;
mii.hSubMenu=hSubMenu;
result=InsertMenuItem(hMenu,
pos,
TRUE,
&mii);
}
BOOL PopupTaskbarMenu(HWND hwndTarget, BOOL InPGPOperation)
{
UINT uHelpPopupPos = 0;
HMENU hMenu = NULL;
HMENU hSubMenu = NULL;
HMENU hMenuDisk = NULL;
HMENU hPopupMenu = NULL;
POINT pt;
PGPHotKeys* phks;
GetCursorPos( &pt );
// If the cursor is at the top, we need to reverse the menu
if(pt.y<200)
{
s_bTaskBarAtTop = TRUE;
uHelpPopupPos = 5;
// load up menu
hMenu = LoadMenu(g_hinst, MAKEINTRESOURCE(IDM_TASKBARMENUREV));
hSubMenu = GetSubMenu(hMenu,0);
phks = PTGetHotKeyStruct ();
sSetHotKeyText (hSubMenu, ID_PURGECACHES, phks->hotkeyPurgePassphraseCache);
sSetPurgeMenuItemState (hSubMenu);
InsertOwnerDrawnMenuItem(
hSubMenu,12,ID_PGPHEADERBITMAP,NULL,NULL,MFS_DISABLED);
#if !PGP_DEBUG
{
MENUITEMINFO mii;
// Replace the "Exit" menu item with "Hide"
char szHide[20];
LoadString (g_hinst, IDS_HIDE, szHide, sizeof(szHide));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_STRING;
mii.dwTypeData = szHide;
mii.cch = lstrlen (szHide);
SetMenuItemInfo (hSubMenu, 10, TRUE, &mii);
}
#endif // PGP_DEBUG
if ((PGPdiskExists))//&&(PGPclPGPdiskEnabled()))
{
// load up PGPdisk's popup menu
hMenuDisk = LoadMenu(g_hinst, MAKEINTRESOURCE(IDM_PGPDISKPOPUP));
hPopupMenu = GetSubMenu(hMenuDisk,0);
InsertOwnerDrawnMenuItem(
hPopupMenu,0,ID_PGPDISKHEADERBITMAP,NULL,NULL,MFS_DISABLED);
InsertOwnerDrawnMenuItem(
hSubMenu,3,ID_LAUNCHPGPDISK,hPopupMenu,&miDisk,MFS_ENABLED);
uHelpPopupPos++;
// add hotkey text to the menu items
sSetHotKeyText (hPopupMenu, ID_PGPDISKUNMOUNTALL, phks->hotkeyDiskUnmount);
}
if (PGPkeysExists)
{
InsertOwnerDrawnMenuItem(
hSubMenu,3,ID_LAUNCHPGPKEYS,NULL,&miKeys,MFS_ENABLED);
uHelpPopupPos++;
}
if (PGPtoolsExists)
{
InsertOwnerDrawnMenuItem(
hSubMenu,3,ID_LAUNCHPGPTOOLS,NULL,&miTools,MFS_ENABLED);
uHelpPopupPos++;
// add hotkey text to the menu items
sSetHotKeyText (hSubMenu, ID_DECRYPTVERIFYWINDOW, phks->hotkeyDecrypt);
sSetHotKeyText (hSubMenu, ID_ENCRYPTSIGNWINDOW, phks->hotkeyEncryptSign);
sSetHotKeyText (hSubMenu, ID_SIGNWINDOW, phks->hotkeySign);
sSetHotKeyText (hSubMenu, ID_ENCRYPTWINDOW, phks->hotkeyEncrypt);
}
else
{
// Remove current window and clipboard submenus
RemoveMenu (hSubMenu, 0, MF_BYPOSITION);
RemoveMenu (hSubMenu, 0, MF_BYPOSITION);
RemoveMenu (hSubMenu, 0, MF_BYPOSITION);
uHelpPopupPos-=3;
}
}
else
{
s_bTaskBarAtTop = FALSE;
uHelpPopupPos = 4;
// load up menu
hMenu = LoadMenu(g_hinst, MAKEINTRESOURCE(IDM_TASKBARMENU));
hSubMenu = GetSubMenu(hMenu,0);
phks = PTGetHotKeyStruct ();
sSetHotKeyText (hSubMenu, ID_PURGECACHES, phks->hotkeyPurgePassphraseCache);
sSetPurgeMenuItemState (hSubMenu);
if(PGPtoolsExists)
{
// add hotkey text to the menu items
sSetHotKeyText (hSubMenu, ID_DECRYPTVERIFYWINDOW, phks->hotkeyDecrypt);
sSetHotKeyText (hSubMenu, ID_ENCRYPTSIGNWINDOW, phks->hotkeyEncryptSign);
sSetHotKeyText (hSubMenu, ID_SIGNWINDOW, phks->hotkeySign);
sSetHotKeyText (hSubMenu, ID_ENCRYPTWINDOW, phks->hotkeyEncrypt);
InsertOwnerDrawnMenuItem(
hSubMenu,9,ID_LAUNCHPGPTOOLS,NULL,&miTools,MFS_ENABLED);
}
else
{
// Remove current window and clipboard submenus
RemoveMenu (hSubMenu, 9, MF_BYPOSITION);
RemoveMenu (hSubMenu, 9, MF_BYPOSITION);
RemoveMenu (hSubMenu, 9, MF_BYPOSITION);
}
// Make these owner drawn so we can get icons
if (PGPkeysExists)
{
InsertOwnerDrawnMenuItem(
hSubMenu,9,ID_LAUNCHPGPKEYS,NULL,&miKeys,MFS_ENABLED);
}
if ((PGPdiskExists))//&&(PGPclPGPdiskEnabled()))
{
// load up PGPdisk's popup menu
hMenuDisk = LoadMenu(g_hinst, MAKEINTRESOURCE(IDM_PGPDISKPOPUP));
hPopupMenu = GetSubMenu(hMenuDisk,0);
InsertOwnerDrawnMenuItem(
hPopupMenu,0,ID_PGPDISKHEADERBITMAP,NULL,NULL,MFS_DISABLED);
InsertOwnerDrawnMenuItem(
hSubMenu,9,ID_LAUNCHPGPDISK,hPopupMenu,&miDisk,MFS_ENABLED);
// add hotkey text to the menu items
sSetHotKeyText (hPopupMenu, ID_PGPDISKUNMOUNTALL, phks->hotkeyDiskUnmount);
}
#if !PGP_DEBUG
{
MENUITEMINFO mii;
// Replace the "Exit" menu item with "Hide"
char szHide[20];
LoadString (g_hinst, IDS_HIDE, szHide, sizeof(szHide));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_STRING;
mii.dwTypeData = szHide;
mii.cch = lstrlen (szHide);
SetMenuItemInfo (hSubMenu, 0, TRUE, &mii);
}
#endif // PGP_DEBUG
// add graphical header
InsertOwnerDrawnMenuItem(
hSubMenu,0,ID_PGPHEADERBITMAP,NULL,NULL,MFS_DISABLED);
uHelpPopupPos++;
}
#if (!PGP_LICENSENUMBERS)
EnableMenuItem(hSubMenu,
ID_LICENSE,
MF_BYCOMMAND | MF_GRAYED);
#endif
/*
///>>> 30sep02 pbj :
consolidated all help into single *.chm file and so only
one TOC exists. Thus, merge all help into one menu item.
// remove help menu items for those components which are not installed
hPopupMenu = GetSubMenu(hSubMenu,uHelpPopupPos);
if(!PGPtoolsExists)
RemoveMenu (hPopupMenu, ID_HELP_MAIL, MF_BYCOMMAND);
if(!((PGPdiskExists)))//&&(PGPclPGPdiskEnabled())))
RemoveMenu (hPopupMenu, ID_HELP_DISK, MF_BYCOMMAND);
///<<<
*/
s_hMenu = hSubMenu;
// Chances are the hooker is disabled, but it won't work
// without a non NULL hwnd anyway...
if(PGPscReadCurrentFocus()==NULL)
{
EnableMenuItem(hMenu,
ID_DECRYPTVERIFYWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_ENCRYPTSIGNWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_SIGNWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_ENCRYPTWINDOW,
MF_BYCOMMAND | MF_GRAYED);
}
if(InPGPOperation)
{
EnableMenuItem(hMenu,
ID_ABOUTPGP,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_ENCRYPTCLIPBOARD,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_SIGNCLIPBOARD,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_ENCRYPTSIGNCLIPBOARD,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_DECRYPTVERIFYCLIPBOARD,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_ENCRYPTWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_SIGNWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_ENCRYPTSIGNWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_DECRYPTVERIFYWINDOW,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_PROPERTIES,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_VIEWCLIPBOARD,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_HELP_GENERAL,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_PURGECACHES,
MF_BYCOMMAND | MF_GRAYED);
/*
///>>> 30sep02 pbj :
consolidated all help into single *.chm file and so only
one TOC exists. Thus, merge all help into one menu item.
EnableMenuItem(hMenu,
ID_HELP_MAIL,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_HELP_DISK,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_HELP_VPN,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_HELP_FIRE,
MF_BYCOMMAND | MF_GRAYED);
///<<<
*/
EnableMenuItem(hMenu,
ID_LAUNCHPGPKEYS,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_LAUNCHPGPTOOLS,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_WIPECLIP,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_LAUNCHPGPTOOLS,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_QUIT_ENCLYPTOR,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,
ID_LICENSE,
MF_BYCOMMAND | MF_GRAYED);
// PGPdisk submenu
EnableMenuItem(hMenuDisk,
ID_PGPDISKMOUNTDISK,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenuDisk,
ID_PGPDISKNEWDISK,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenuDisk,
ID_PGPDISKEDITDISK,
MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenuDisk,
ID_PGPDISKUNMOUNTALL,
MF_BYCOMMAND | MF_GRAYED);
}
// Calls to SetForegroundWindow and PostMessage to fix a bug
// documented in PSS ID Number: Q135788
SetForegroundWindow(hwndTarget);
TrackPopupMenu( hSubMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON,
pt.x, pt.y, 0, hwndTarget, NULL);
PostMessage( hwndTarget, WM_NULL, 0, 0 ) ;
// Above fixes "three clicks" problem -wjb
DestroyMenu(hMenu);
return TRUE;
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?