pthotkey.c

来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 235 行

C
235
字号
/*__________________________________________________________________________
 Copyright (C) 2002 PGP Corporation
 All rights reserved.
 
 $Id: PThotkey.c,v 1.12 2002/10/22 15:26:35 pbj Exp $
__________________________________________________________________________*/
#include "pgpPFLConfig.h"

#include "precomp.h"
#include "pgpWin32IPC.h"
#include "PGPclientlib.h"

#include "PThotkey.h"
#include "pgpUtilities.h"
#include "pgpClientPrefs.h"

static	PGPHotKeys		s_hotkeys;

static VOID
sRemoveHotKeys (HWND hwnd)
{
	memset (&s_hotkeys, 0, sizeof(s_hotkeys));

	UnregisterHotKey (hwnd, kPurgePassphraseCache);
	UnregisterHotKey (hwnd, kEncryptCurrentWindow);
	UnregisterHotKey (hwnd, kSignCurrentWindow);
	UnregisterHotKey (hwnd, kEncryptSignCurrentWindow);
	UnregisterHotKey (hwnd, kDecryptCurrentWindow);
	UnregisterHotKey (hwnd, kUnmountPGPDisks);
}


static BOOL
sSetSingleHotKey (
		HWND		hwnd,
		UINT		uID,
		PGPUInt32	uKey)
{
	if (uKey & kPGPHotKeyEnabled)
	{
		UINT	uMod	= 0;

		if (uKey & kPGPHotKeyAltModifier)
			uMod |= MOD_ALT;
		if (uKey & kPGPHotKeyCtrlModifier)
			uMod |= MOD_CONTROL;
		if (uKey & kPGPHotKeyShiftModifier)
			uMod |= MOD_SHIFT;

		return RegisterHotKey (hwnd, uID, uMod, (uKey & 0xFF));
	}
	else
		return TRUE;
}


static VOID
sSetHotKeys (
		HWND			hwnd,
		PGPContextRef	context,
		PGPPrefRef		prefref)
{
	PGPInt32		ids			= 0;
	PGPHotKeys*		phks;
	PGPSize			size;
	PGPError		err;

	memcpy (&s_hotkeys, &sDefaultHotKeys, sizeof(s_hotkeys));
	err = PGPGetPrefData (prefref, kPGPPrefHotKeyData, &size, &phks);

	if (IsntPGPError (err))
	{
		if (size == sizeof (s_hotkeys))
			memcpy (&s_hotkeys, phks, size);

		PGPFreeData(phks);
	}

	if (!sSetSingleHotKey (hwnd, kPurgePassphraseCache, 
			s_hotkeys.hotkeyPurgePassphraseCache))
	{
		s_hotkeys.hotkeyPurgePassphraseCache &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETPURGEHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kEncryptCurrentWindow, 
			s_hotkeys.hotkeyEncrypt))
	{
		s_hotkeys.hotkeyEncrypt &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETENCRYPTHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kSignCurrentWindow, 
			s_hotkeys.hotkeySign))
	{
		s_hotkeys.hotkeySign &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETSIGNHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kEncryptSignCurrentWindow, 
			s_hotkeys.hotkeyEncryptSign))
	{
		s_hotkeys.hotkeyEncryptSign &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETENCRYPTSIGNHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kDecryptCurrentWindow, 
			s_hotkeys.hotkeyDecrypt))
	{
		s_hotkeys.hotkeyDecrypt &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETDECRYPTHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kUnmountPGPDisks, 
			s_hotkeys.hotkeyDiskUnmount))
	{
		s_hotkeys.hotkeyDiskUnmount &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETUNMOUNTHOTKEY;
		goto done;
	}

done:
	if (ids)
	{
		PGPSetPrefData (
				prefref, kPGPPrefHotKeyData, sizeof(s_hotkeys), &s_hotkeys);
		PGPclFlushClientLibPrefs (prefref, NULL);

		PTMessageBox (hwnd, IDS_CAPTION, ids, MB_ICONEXCLAMATION|MB_OK);

		PGPclPreferences (context, hwnd, kPGPclHotkeyPrefs, NULL);
	}
}


VOID 
PTHotKeyInit (void)
{
	memset (&s_hotkeys, 0, sizeof(s_hotkeys));
}


PGPHotKeys* 
PTGetHotKeyStruct (void)
{
	return (&s_hotkeys);
}


VOID
PTHandleHotKeyPrefsChange (
		HWND			hwnd,
		PGPContextRef	context,
		PGPPrefRef		prefref)
{
	sRemoveHotKeys (hwnd);
	sSetHotKeys (hwnd, context, prefref);
}


VOID
PTCheckForHotKeyMsg (
		HWND	hwnd,
		PGPContextRef context,
		UINT	msg)
{
	if (msg == PGPTRAY_M_DISABLEHOTKEYS)
	{
		sRemoveHotKeys (hwnd);
	}
	if (msg == PGPTRAY_M_ENABLEHOTKEYS)
	{
		PGPError err;
		PGPPrefRef prefref;

		err=PGPclPeekClientLibPrefRefs(&prefref,NULL);
		
		if(IsntPGPError(err))
		{
			sSetHotKeys (hwnd, context, prefref);
		}
	}
}


VOID
PTProcessHotKey (
		HWND			hwnd, 
		PGPContextRef	context,
		WPARAM			wParam)
{
	switch (wParam) {
		case kPurgePassphraseCache :
			PGPPurgePassphraseCache (context);
			PGPPurgeKeyDBCache (context);
			break;

		case kEncryptCurrentWindow :
			SendMessage (hwnd, WM_COMMAND, ID_ENCRYPTWINDOW, 0);
			break;

		case kSignCurrentWindow :
			SendMessage (hwnd, WM_COMMAND, ID_SIGNWINDOW, 0);
			break;

		case kEncryptSignCurrentWindow :
			SendMessage (hwnd, WM_COMMAND, ID_ENCRYPTSIGNWINDOW, 0);
			break;

		case kDecryptCurrentWindow :
			SendMessage (hwnd, WM_COMMAND, ID_DECRYPTVERIFYWINDOW, 0);
			break;

		case kUnmountPGPDisks :
			SendMessage (hwnd, WM_COMMAND, ID_PGPDISKUNMOUNTALL, 0);
			break;
	}
}


VOID
PTRemoveHotKeys (
		HWND hwnd)
{
	sRemoveHotKeys (hwnd);
}



⌨️ 快捷键说明

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