⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwsafedlg.h

📁 一款密码保险箱源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
  KeePass Password Safe - The Open-Source Password Manager
  Copyright (C) 2003-2007 Dominik Reichl <dominik.reichl@t-online.de>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#if !defined(AFX_PWSAFEDLG_H__206CC2C3_063D_11D8_BF16_0050BF14F5CC__INCLUDED_)
#define AFX_PWSAFEDLG_H__206CC2C3_063D_11D8_BF16_0050BF14F5CC__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "../KeePassLibCpp/PwManager.h"
#include "../KeePassLibCpp/DataExchange/PwExport.h"
#include "../KeePassLibCpp/PasswordGenerator/PasswordGenerator.h"

#include "NewGUI/NewGUICommon.h"
#include "NewGUI/KCWndUtil.h"
#include "NewGUI/KCSideBannerWnd.h"
#include "NewGUI/BCMenu.h"
#include "NewGUI/XPStyleButtonST.h"
#include "NewGUI/ThemeHelperST.h"
#include "NewGUI/CustomListCtrlEx.h"
#include "NewGUI/CustomTreeCtrlEx.h"
#include "NewGUI/SystemTray.h"
#include "NewGUI/SystemTrayEx.h"
#include "NewGUI/AutoRichEditCtrlFx.h"
#include "Plugins/PluginMgr.h"
#include "Util/PrivateConfigEx.h"
#include "Util/SInstance.h"
#include "Util/SessionNotify.h"
#include "Util/RemoteControl.h"
#include "../KeePassLibCpp/SysDefEx.h"

#define _CALLPLUGINS(__c,__l,__w) CPluginManager::Instance().CallPlugins((__c),(__l),(__w))

#define GUI_GROUPLIST_EXT 170
// Standard Windows Dialog GUI_SPACER = 11
#define GUI_SPACER 4

#define APPWND_TIMER_ID         1
#define APPWND_TIMER_ID_UPDATER 2

#define ICOIDX_REMOVABLE 16
#define ICOIDX_FIXED 17
#define ICOIDX_REMOTE 18
#define ICOIDX_CDROM 19
#define ICOIDX_RAMDISK 20
#define ICOIDX_NODRIVE 21

// #define PWS_DEFAULT_SPLITTER_Y 270
#define PWS_DEFAULT_SPLITTER_Y 10
#define MENU_EXTRAS_ITEMCOUNT  8

#define PWS_NEW_ATTACHMENT _T(":: ")

#define WM_PLUGINS_FIRST   (0x9FFF)
#define WM_PLUGINS_LAST    (0xAFFF)

#define HOTKEYID_AUTOTYPE  33
#define HOTKEYID_RESTORE   34

#define CM_TIMED 0
#define CM_ENHSECURE 1

// Show expired / soon-to-expire entries at database open, flags
#define AUTOEXPIRE_NOSHOW  0
#define AUTOEXPIRE_EXPIRED 1
#define AUTOEXPIRE_SOONTO  2

// Auto-type methods
#define ATM_DROPBACK       0
#define ATM_MINIMIZE       1

#define LVSX_CHANGING      DWORD_MAX

#define KPCM_NULL          0
#define KPCM_EXIT          1

#define MWS_MIN_CX 314
#define MWS_MIN_CY 207

/////////////////////////////////////////////////////////////////////////////

class CPwSafeDlg : public CDialog
{
public:
	CPwSafeDlg(CWnd* pParent = NULL);

	void OnUpdateFlush(CMenu *pMenu); // BCMenu function

	static void _TranslateMenu(BCMenu *pBCMenu, BOOL bAppendSuffix, BOOL *pFlags);
	static const TCHAR *_GetCmdAccelExt(const TCHAR *psz);
	void RestartApplication();
	static CString _GetSecureEditTipText(const TCHAR *tszBase);
	void RebuildContextMenus();
	void DeleteContextMenus();
	void _SetDefaultFocus();

	void ProcessResize();
	void CleanUp();

	void SaveOptions();
	void _SaveWindowPositionAndSize(CPrivateConfigEx* pcfg);

	void SetStatusTextEx(LPCTSTR lpStatusText, int nPane = -1);
	inline void NotifyUserActivity();
	void UpdateAutoSortMenuItems();
	void BuildPluginMenu();
	BOOL RegisterGlobalHotKey(int nHotKeyID, DWORD dwHotKey, BOOL bReleasePrevious, BOOL bMessageBoxOnFail);
	void AdjustPwListMode();
	void AdjustColumnWidths();

	void ParseAndOpenURLWithEntryInfo(LPCTSTR lpURL, PW_ENTRY *pEntry);
	void _AutoType(PW_ENTRY *pEntry, BOOL bLoseFocus, DWORD dwAutoTypeSeq);

	void UpdateGroupList();
	void UpdatePasswordList();
	void RefreshPasswordList(); // Refresh entries by UUID

	DWORD GetSelectedEntry();
	DWORD GetSelectedEntriesCount();
	DWORD GetSelectedGroupId();

	BOOL GetExportOptions(PWEXPORT_OPTIONS *pOptions, CPwExport *pPwExport);
	CString GetExportFile(int nFormat, LPCTSTR lpBaseFileName, BOOL bFixFileName);
	void ExportSelectedGroup(int nFormat);
	void ExportGroupToKeePass(DWORD dwGroupId);

	CString _MakeRtfString(LPCTSTR lptString);
	void ShowEntryDetails(PW_ENTRY *p);

	HTREEITEM _GetLastGroupItem(CTreeCtrl *pTree);
	void GroupSyncStates(BOOL bGuiToMgr = TRUE);

	HTREEITEM _GroupIdToHTreeItem(DWORD_PTR dwGroupId);

	void _ProcessGroupKey(UINT nChar, UINT nFlags);
	void _ProcessListKey(UINT nChar, BOOL bAlt);

	void CB_OnPwlistColumnWidthChange(int iColumn, int iSize);
	void _SortListIfAutoSort();

	void _HandleEntryDrop(DWORD dwDropType, HTREEITEM hTreeItem);

	void _List_SaveView() { m_nSaveView = m_cList.GetTopIndex(); }
	void _List_RestoreView() // Restore the previous password list view
	{
		int nItemCount = m_cList.GetItemCount();

		if(nItemCount <= 0) return;

		m_cList.EnsureVisible(nItemCount - 1, FALSE);

		if(m_nSaveView < nItemCount)
			m_cList.EnsureVisible(m_nSaveView, FALSE);
	}
	void _Groups_SaveView(BOOL bSaveSelection = TRUE)
	{
		HTREEITEM hTop = m_cGroups.GetFirstVisibleItem();
		if(hTop != NULL) m_dwGroupsSaveFirstVisible = m_cGroups.GetItemData(hTop);
		else m_dwGroupsSaveFirstVisible = DWORD_MAX;

		m_dwGroupsSaveSelected = DWORD_MAX;
		if(bSaveSelection == TRUE)
		{
			HTREEITEM h = m_cGroups.GetSelectedItem();
			if(h != NULL) m_dwGroupsSaveSelected = m_cGroups.GetItemData(h);
		}
	}
	void _Groups_RestoreView()
	{
		HTREEITEM h;
		
		if(m_dwGroupsSaveFirstVisible != DWORD_MAX)
		{
			h = _GroupIdToHTreeItem(m_dwGroupsSaveFirstVisible);
			if(h != NULL) m_cGroups.SelectSetFirstVisible(h);
		}

		if(m_dwGroupsSaveSelected != DWORD_MAX)
		{
			h = _GroupIdToHTreeItem(m_dwGroupsSaveSelected);
			if(h != NULL) m_cGroups.SelectItem(h);
		}
	}

	void _CalcColumnSizes();
	void _SetColumnWidths();
	void _SetListParameters();

	BOOL _RemoveSearchGroup();
	void _DeleteBackupEntries();

	void _SelChangeView(UINT uID);
	void _List_SetEntry(DWORD dwInsertPos, PW_ENTRY *pwe, BOOL bIsNewEntry, PW_TIME *ptNow);
	DWORD _ListSelToEntryIndex(DWORD dwSelected = DWORD_MAX);
	DWORD _EntryUuidToListPos(BYTE *pUuid);

	void _DeleteTemporaryFiles();

	void _UpdateToolBar(BOOL bForceUpdate = FALSE);
	void _UpdateTitleBar();
	void _UpdateTrayIcon();

	void _UpdateGuiToManager();

	void _TouchGroup(DWORD dwGroupId, BOOL bEdit);
	void _TouchEntry(DWORD dwListIndex, BOOL bEdit);

	void _SyncSubTree(CTreeCtrl *pTree, HTREEITEM hItem, BOOL bGuiToMgr);
	void _SyncItem(CTreeCtrl *pTree, HTREEITEM hItem, BOOL bGuiToMgr);

	void _SortList(DWORD dwByField, BOOL bAutoSortCall);
	BOOL _CheckIfCanSort();

	HTREEITEM _FindSelectInTree(CTreeCtrl *pTree, HTREEITEM hRoot, DWORD_PTR dwGroupId);

	static BOOL IsUnsafeAllowed(HWND hWndParent);

	void _OpenDatabase(CPwManager *pDbMgr, const TCHAR *pszFile, const TCHAR *pszPassword, const TCHAR *pszKeyFile, BOOL bOpenLocked, LPCTSTR lpPreSelectPath, BOOL bIgnoreCorrupted);
	BOOL _ChangeMasterKey(CPwManager *pDbMgr, BOOL bCreateNew);
	void _PrintGroup(DWORD dwGroupId);
	void _Find(DWORD dwFindGroupId);
	void _DoQuickFind();
	void _HandleSelectAll();
	void _ShowExpiredEntries(BOOL bShowIfNone, BOOL bShowExpired, BOOL bShowSoonToExpire);

	BOOL _ParseCommandLine();
	void _ParseSpecAndSetFont(const TCHAR *pszSpec);

	void _ShowToolBar(BOOL bShow);
	void _EnableViewMenuItems(BCMenu *pMenu);

	void _FinishDragging(BOOL bDraggingImageList);

	static UINT GetKeePassControlMessageID();

	BCMenu m_menu; // Our XP-style menu
	BOOL m_bMenu; // Menu created?

	CImageList m_ilIcons;

	BOOL m_bCheckForInstance;
	CInstanceChecker m_instanceChecker;

	HICON m_hTrayIconNormal;
	HICON m_hTrayIconLocked;

	BOOL m_bDisplayDialog;
	BOOL m_bCachedToolBarUpdate;
	BOOL m_bCachedPwlistUpdate;

	CString m_strFile;
	CString m_strFileAbsolute;
	BOOL m_bFileOpen;
	BOOL m_bModified;
	BOOL m_bFileReadOnly;

	CPwManager m_mgr;

	static BOOL m_bSecureEdits;
	static BOOL m_bDisableUnsafeAtStart;
	static BOOL m_bUseLocalTimeFormat;
	static PW_GEN_SETTINGS_EX m_pgsAutoProfile;

private:
	int m_nClipboardMethod;
	BOOL m_bTimer;
	int m_nClipboardCountdown;
	int m_nClipboardState;
	int m_nFileRelockCountdown;
	HWND m_hwndNextViewer;
	BOOL m_bOpenLastDb;
	CString m_strLastDb;
	BOOL m_bImgButtons;
	BOOL m_bEntryGrid;
	BOOL m_bAutoSaveDb;
	long m_nLockTimeDef;
	long m_nLockCountdown;
	BOOL m_bAutoShowExpired;
	BOOL m_bAutoShowExpiredSoon;
	BOOL m_bBackupEntries;
	BOOL m_bSingleClickTrayIcon;
	DWORD m_dwDefaultExpire;
	BOOL m_bDeleteBackupsOnSave;
	BOOL m_bDisableAutoType;
	BOOL m_bLockOnWinLock;

	BOOL m_bExiting;
	BOOL m_bLocked;
	long m_nLockedViewParams[3];
	BOOL m_bWasMaximized;
	BOOL m_bMinimized;
	BOOL m_bTrayed;
	BOOL m_bRestartApplication;

	CSessionNotify m_sessionNotify;

	BOOL m_bWindowsNewLine;
	BOOL m_bPasswordStars;
	BOOL m_bUserStars;
	BOOL m_bDisableUnsafe;
	BOOL m_bRememberLast;
	BOOL m_bUsePuttyForURLs;
	BOOL m_bSaveOnLATMod;
	BOOL m_bStartMinimized;
	BOOL m_bQuickFindIncBackup;
	BOOL m_bCheckForUpdate;

	CStatusBarCtrl m_sbStatus;
	BOOL m_bShowToolBar;

	BOOL m_bAlwaysOnTop;
	BOOL m_bShowTitle;
	BOOL m_bShowUserName;
	BOOL m_bShowURL;
	BOOL m_bShowPassword;
	BOOL m_bShowNotes;
	BOOL m_bShowCreation;
	BOOL m_bShowLastMod;
	BOOL m_bShowLastAccess;
	BOOL m_bShowExpire;
	BOOL m_bShowUUID;
	BOOL m_bShowAttach;
	BOOL m_bLockOnMinimize;
	BOOL m_bMinimizeToTray;
	BOOL m_bCloseMinimizes;
	BOOL m_bEntryView;
	BOOL m_bColAutoSize;
	int m_nAutoSort;
	int m_nAutoTypeMethod;
	BOOL m_bShowFullPath;
	BOOL m_bCopyURLs;
	BOOL m_bExitInsteadOfLockAT;
	CString m_strURLOverride;
	BOOL m_bAllowSaveIfModifiedOnly;

	BCMenu *m_pPwListMenu;
	BCMenu *m_pGroupListMenu;
	BCMenu *m_pEntryViewMenu;
	BCMenu *m_pPwListTrackableMenu;
	BCMenu *m_pGroupListTrackableMenu;
	BCMenu *m_pEntryViewTrackableMenu;
	BOOL m_bRestoreHotKeyRegistered;

⌨️ 快捷键说明

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