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 + -
显示快捷键?