📄 pwsafedlg.cpp
字号:
/*
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
*/
#include "StdAfx.h"
#include <afxadv.h>
#include <winable.h>
#include <mmsystem.h>
#include "PwSafe.h"
#include "PwSafeDlg.h"
#include "../KeePassLibCpp/PwManager.h"
#include "../KeePassLibCpp/DataExchange/PwImport.h"
#include "../KeePassLibCpp/Util/PwUtil.h"
#include "../KeePassLibCpp/Crypto/TestImpl.h"
#include "../KeePassLibCpp/Util/MemUtil.h"
#include "../KeePassLibCpp/Util/StrUtil.h"
#include "../KeePassLibCpp/Util/AppUtil.h"
#include "Util/WinUtil.h"
#include "Util/SendKeys.h"
#include "Util/FileLock.h"
#include "Util/CmdLine/CmdArgs.h"
#include "Util/CmdLine/Executable.h"
#include "Util/UpdateCheck.h"
#include "Util/RestartManagerEx.h"
#include "../KeePassLibCpp/Util/TranslateEx.h"
#include "NewGUI/XHyperLink.h"
#include "NewGUI/XPStyleButtonST.h"
#include "NewGUI/SecureEditEx.h"
#include "NewGUI/MsgRelayWnd.h"
#include "Plugins/MsgInterface.h"
#include "PasswordDlg.h"
#include "AddEntryDlg.h"
#include "AddGroupDlg.h"
#include "PwGeneratorExDlg.h"
#include "FindInDbDlg.h"
#include "LanguagesDlg.h"
#include "OptionsDlg.h"
#include "GetRandomDlg.h"
#include "EntryPropertiesDlg.h"
#include "TanWizardDlg.h"
#include "EntryListDlg.h"
#include "DbSettingsDlg.h"
#include "PluginsDlg.h"
#include "CheckOptionsDlg.h"
#include "ImportOptionsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_MY_SYSTRAY_NOTIFY (WM_APP + 10)
#define WM_MY_UPDATECLIPBOARD (WM_APP + 11)
#ifdef _DEBUG
// #define or #undef sample group and entries
#define ___PWSAFE_SAMPLE_DATA
#endif
static TCHAR g_pNullString[4] = { 0, 0, 0, 0 };
static const BYTE g_uuidZero[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static PW_TIME g_tNeverExpire;
static const TCHAR *g_psztNeverExpires = _T("");
static int g_nIndicatorWidths[3] = { 200, 340, -1 };
BOOL CPwSafeDlg::m_bSecureEdits = TRUE;
BOOL CPwSafeDlg::m_bUseLocalTimeFormat = TRUE;
BOOL CPwSafeDlg::m_bDisableUnsafeAtStart = FALSE;
const UINT WM_REG_TASKBARCREATED = ::RegisterWindowMessage(_T("TaskbarCreated"));
const UINT WM_REG_PROCESSMAILSLOT = ::RegisterWindowMessage(_T("KeePassProcessMailslot"));
const UINT WM_REG_KEEPASSCONTROL = ::RegisterWindowMessage(_T("KeePassControl"));
PW_GEN_SETTINGS_EX CPwSafeDlg::m_pgsAutoProfile;
/////////////////////////////////////////////////////////////////////////////
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
CKCSideBannerWnd m_banner;
HICON m_hWindowIcon;
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
CXHyperLink m_hlDonate;
CXHyperLink m_hlCredits;
CXHyperLink m_hlLicense;
CXHyperLink m_hlHelp;
CXHyperLink m_hlHomepage;
CXPStyleButtonST m_btOK;
//}}AFX_DATA
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
protected:
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
afx_msg LRESULT OnXHyperLinkClicked(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Control(pDX, IDC_HLINK_DONATE, m_hlDonate);
DDX_Control(pDX, IDC_HLINK_CREDITS, m_hlCredits);
DDX_Control(pDX, IDC_HLINK_LICENSEFILE, m_hlLicense);
DDX_Control(pDX, IDC_HLINK_HELPFILE, m_hlHelp);
DDX_Control(pDX, IDC_HLINK_HOMEPAGE, m_hlHomepage);
DDX_Control(pDX, IDOK, m_btOK);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
ON_REGISTERED_MESSAGE(WM_XHYPERLINK_CLICKED, OnXHyperLinkClicked)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
class CPwSafeAppRI : public CNewRandomInterface
{
public:
BOOL GenerateRandomSequence(unsigned long uRandomSeqSize, unsigned char *pBuffer) const;
};
BOOL CPwSafeAppRI::GenerateRandomSequence(unsigned long uRandomSeqSize, unsigned char *pBuffer) const
{
ASSERT(uRandomSeqSize <= 32); // Only up to 32-byte long random sequence is supported for now!
if(uRandomSeqSize > 32) uRandomSeqSize = 32;
CGetRandomDlg dlg;
if(dlg.DoModal() == IDCANCEL) return FALSE;
memcpy(pBuffer, dlg.m_pFinalRandom, uRandomSeqSize);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
CPwSafeDlg::CPwSafeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPwSafeDlg::IDD, pParent), m_instanceChecker(_T("KeePass Instance"))
{
//{{AFX_DATA_INIT(CPwSafeDlg)
m_strQuickFind = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bExiting = FALSE;
m_bTrayed = FALSE;
m_bMinimized = FALSE;
m_bIgnoreSizeEvent = TRUE;
m_bCheckForInstance = FALSE;
m_bRestoreHotKeyRegistered = FALSE;
m_hLastSelectedGroup = NULL;
m_dwLastNumSelectedItems = 0;
m_dwLastFirstSelectedItem = 0;
m_nClipboardState = 0;
m_hwndNextViewer = NULL;
m_bGlobalAutoTypePending = FALSE;
m_pPwListMenu = m_pGroupListMenu = m_pEntryViewMenu = NULL;
m_pPwListTrackableMenu = m_pGroupListTrackableMenu = m_pEntryViewTrackableMenu = NULL;
m_lNormalWndPosX = m_lNormalWndPosY = 0;
m_lNormalWndSizeW = m_lNormalWndSizeH = -1;
m_mgr.InitPrimaryInstance();
}
void CPwSafeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPwSafeDlg)
DDX_Control(pDX, IDC_MENULINE, m_stcMenuLine);
DDX_Control(pDX, IDC_EDIT_QUICKFIND, m_cQuickFind);
DDX_Control(pDX, IDC_GROUPLIST, m_cGroups);
DDX_Control(pDX, IDC_TB_NEW, m_btnTbNew);
DDX_Control(pDX, IDC_TB_LOCK, m_btnTbLock);
DDX_Control(pDX, IDC_TB_FIND, m_btnTbFind);
DDX_Control(pDX, IDC_TB_EDITENTRY, m_btnTbEditEntry);
DDX_Control(pDX, IDC_TB_DELETEENTRY, m_btnTbDeleteEntry);
DDX_Control(pDX, IDC_TB_COPYUSER, m_btnTbCopyUser);
DDX_Control(pDX, IDC_TB_COPYPW, m_btnTbCopyPw);
DDX_Control(pDX, IDC_TB_ADDENTRY, m_btnTbAddEntry);
DDX_Control(pDX, IDC_TB_ABOUT, m_btnTbAbout);
DDX_Control(pDX, IDC_TB_SAVE, m_btnTbSave);
DDX_Control(pDX, IDC_TB_OPEN, m_btnTbOpen);
DDX_Control(pDX, IDC_PWLIST, m_cList);
DDX_Control(pDX, IDC_RE_ENTRYVIEW, m_reEntryView);
DDX_Text(pDX, IDC_EDIT_QUICKFIND, m_strQuickFind);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPwSafeDlg, CDialog)
//{{AFX_MSG_MAP(CPwSafeDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
ON_WM_SIZING()
ON_WM_MEASUREITEM()
ON_WM_MENUCHAR()
ON_WM_INITMENUPOPUP()
ON_COMMAND(ID_FILE_EXIT, OnFileExit)
ON_UPDATE_COMMAND_UI(ID_FILE_EXIT, OnUpdateFileExit)
ON_COMMAND(ID_INFO_ABOUT, OnInfoAbout)
ON_COMMAND(ID_SAFE_ADDGROUP, OnSafeAddGroup)
ON_COMMAND(ID_VIEW_HIDESTARS, OnViewHideStars)
ON_COMMAND(ID_PWLIST_ADD, OnPwlistAdd)
ON_COMMAND(ID_PWLIST_EDIT, OnPwlistEdit)
ON_COMMAND(ID_PWLIST_DELETE, OnPwlistDelete)
ON_NOTIFY(NM_RCLICK, IDC_PWLIST, OnRclickPwlist)
ON_NOTIFY(NM_CLICK, IDC_GROUPLIST, OnClickGroupList)
ON_COMMAND(ID_PWLIST_COPYPW, OnPwlistCopyPw)
ON_WM_TIMER()
ON_NOTIFY(NM_DBLCLK, IDC_PWLIST, OnDblclkPwlist)
ON_NOTIFY(NM_RCLICK, IDC_GROUPLIST, OnRclickGroupList)
ON_COMMAND(ID_PWLIST_COPYUSER, OnPwlistCopyUser)
ON_COMMAND(ID_PWLIST_VISITURL, OnPwlistVisitUrl)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveAs)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_COMMAND(ID_SAFE_OPTIONS, OnSafeOptions)
ON_COMMAND(ID_SAFE_REMOVEGROUP, OnSafeRemoveGroup)
ON_COMMAND(ID_FILE_CHANGEMASTERPW, OnFileChangeMasterPw)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVEAS, OnUpdateFileSaveAs)
ON_UPDATE_COMMAND_UI(ID_FILE_CHANGEMASTERPW, OnUpdateFileChangeMasterPw)
ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose)
ON_UPDATE_COMMAND_UI(ID_PWLIST_COPYPW, OnUpdatePwlistCopyPw)
ON_UPDATE_COMMAND_UI(ID_PWLIST_COPYUSER, OnUpdatePwlistCopyUser)
ON_UPDATE_COMMAND_UI(ID_PWLIST_DELETE, OnUpdatePwlistDelete)
ON_UPDATE_COMMAND_UI(ID_PWLIST_EDIT, OnUpdatePwlistEdit)
ON_UPDATE_COMMAND_UI(ID_PWLIST_VISITURL, OnUpdatePwlistVisitUrl)
ON_UPDATE_COMMAND_UI(ID_SAFE_REMOVEGROUP, OnUpdateSafeRemoveGroup)
ON_UPDATE_COMMAND_UI(ID_SAFE_ADDGROUP, OnUpdateSafeAddGroup)
ON_UPDATE_COMMAND_UI(ID_PWLIST_ADD, OnUpdatePwlistAdd)
ON_COMMAND(ID_EXPORT_TXT, OnExportTxt)
ON_COMMAND(ID_EXPORT_HTML, OnExportHtml)
ON_COMMAND(ID_EXPORT_XML, OnExportXml)
ON_COMMAND(ID_EXPORT_CSV, OnExportCsv)
ON_UPDATE_COMMAND_UI(ID_EXPORT_TXT, OnUpdateExportTxt)
ON_UPDATE_COMMAND_UI(ID_EXPORT_HTML, OnUpdateExportHtml)
ON_UPDATE_COMMAND_UI(ID_EXPORT_XML, OnUpdateExportXml)
ON_UPDATE_COMMAND_UI(ID_EXPORT_CSV, OnUpdateExportCsv)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_UPDATE_COMMAND_UI(ID_FILE_PRINT, OnUpdateFilePrint)
ON_COMMAND(ID_EXTRAS_GENPW, OnExtrasGenPw)
ON_COMMAND(ID_SAFE_MODIFYGROUP, OnSafeModifyGroup)
ON_UPDATE_COMMAND_UI(ID_SAFE_MODIFYGROUP, OnUpdateSafeModifyGroup)
ON_COMMAND(ID_PWLIST_FIND, OnPwlistFind)
ON_UPDATE_COMMAND_UI(ID_PWLIST_FIND, OnUpdatePwlistFind)
ON_COMMAND(ID_PWLIST_FINDINGROUP, OnPwlistFindInGroup)
ON_UPDATE_COMMAND_UI(ID_PWLIST_FINDINGROUP, OnUpdatePwlistFindInGroup)
ON_COMMAND(ID_PWLIST_DUPLICATE, OnPwlistDuplicate)
ON_UPDATE_COMMAND_UI(ID_PWLIST_DUPLICATE, OnUpdatePwlistDuplicate)
ON_COMMAND(ID_INFO_HOMEPAGE, OnInfoHomepage)
ON_COMMAND(ID_VIEW_ALWAYSONTOP, OnViewAlwaysOnTop)
ON_COMMAND(ID_SAFE_EXPORTGROUP_HTML, OnSafeExportGroupHtml)
ON_COMMAND(ID_SAFE_EXPORTGROUP_XML, OnSafeExportGroupXml)
ON_COMMAND(ID_SAFE_EXPORTGROUP_CSV, OnSafeExportGroupCsv)
ON_UPDATE_COMMAND_UI(ID_SAFE_EXPORTGROUP_HTML, OnUpdateSafeExportGroupHtml)
ON_UPDATE_COMMAND_UI(ID_SAFE_EXPORTGROUP_XML, OnUpdateSafeExportGroupXml)
ON_UPDATE_COMMAND_UI(ID_SAFE_EXPORTGROUP_CSV, OnUpdateSafeExportGroupCsv)
ON_COMMAND(ID_SAFE_PRINTGROUP, OnSafePrintGroup)
ON_UPDATE_COMMAND_UI(ID_SAFE_PRINTGROUP, OnUpdateSafePrintGroup)
ON_COMMAND(ID_PWLIST_MOVEUP, OnPwlistMoveUp)
ON_UPDATE_COMMAND_UI(ID_PWLIST_MOVEUP, OnUpdatePwlistMoveUp)
ON_COMMAND(ID_PWLIST_MOVETOP, OnPwlistMoveTop)
ON_UPDATE_COMMAND_UI(ID_PWLIST_MOVETOP, OnUpdatePwlistMoveTop)
ON_COMMAND(ID_PWLIST_MOVEDOWN, OnPwlistMoveDown)
ON_UPDATE_COMMAND_UI(ID_PWLIST_MOVEDOWN, OnUpdatePwlistMoveDown)
ON_COMMAND(ID_PWLIST_MOVEBOTTOM, OnPwlistMoveBottom)
ON_UPDATE_COMMAND_UI(ID_PWLIST_MOVEBOTTOM, OnUpdatePwlistMoveBottom)
ON_NOTIFY(LVN_BEGINDRAG, IDC_PWLIST, OnBeginDragPwlist)
ON_COMMAND(ID_FILE_CHANGELANGUAGE, OnFileChangeLanguage)
ON_COMMAND(ID_INFO_README, OnInfoReadme)
ON_COMMAND(ID_VIEW_TITLE, OnViewTitle)
ON_COMMAND(ID_VIEW_USERNAME, OnViewUsername)
ON_COMMAND(ID_VIEW_URL, OnViewUrl)
ON_COMMAND(ID_VIEW_PASSWORD, OnViewPassword)
ON_COMMAND(ID_VIEW_NOTES, OnViewNotes)
ON_COMMAND(ID_FILE_LOCK, OnFileLock)
ON_UPDATE_COMMAND_UI(ID_FILE_LOCK, OnUpdateFileLock)
ON_COMMAND(ID_GROUP_MOVETOP, OnGroupMoveTop)
ON_UPDATE_COMMAND_UI(ID_GROUP_MOVETOP, OnUpdateGroupMoveTop)
ON_COMMAND(ID_GROUP_MOVEBOTTOM, OnGroupMoveBottom)
ON_UPDATE_COMMAND_UI(ID_GROUP_MOVEBOTTOM, OnUpdateGroupMoveBottom)
ON_COMMAND(ID_GROUP_MOVEUP, OnGroupMoveUp)
ON_UPDATE_COMMAND_UI(ID_GROUP_MOVEUP, OnUpdateGroupMoveUp)
ON_COMMAND(ID_GROUP_MOVEDOWN, OnGroupMoveDown)
ON_UPDATE_COMMAND_UI(ID_GROUP_MOVEDOWN, OnUpdateGroupMoveDown)
ON_MESSAGE(WM_MY_SYSTRAY_NOTIFY, OnTrayNotification)
ON_MESSAGE(WM_MY_UPDATECLIPBOARD, OnUpdateClipboard)
ON_COMMAND(ID_VIEW_HIDE, OnViewHide)
ON_COMMAND(ID_IMPORT_CSV, OnImportCsv)
ON_UPDATE_COMMAND_UI(ID_IMPORT_CSV, OnUpdateImportCsv)
ON_NOTIFY(NM_CLICK, IDC_PWLIST, OnClickPwlist)
ON_COMMAND(ID_IMPORT_CWALLET, OnImportCWallet)
ON_UPDATE_COMMAND_UI(ID_IMPORT_CWALLET, OnUpdateImportCWallet)
ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
ON_COMMAND(ID_IMPORT_PWSAFE, OnImportPwSafe)
ON_UPDATE_COMMAND_UI(ID_IMPORT_PWSAFE, OnUpdateImportPwSafe)
ON_COMMAND(ID_VIEW_CREATION, OnViewCreation)
ON_COMMAND(ID_VIEW_LASTMOD, OnViewLastMod)
ON_COMMAND(ID_VIEW_LASTACCESS, OnViewLastAccess)
ON_COMMAND(ID_VIEW_EXPIRE, OnViewExpire)
ON_COMMAND(ID_VIEW_UUID, OnViewUuid)
ON_BN_CLICKED(IDC_TB_OPEN, OnTbOpen)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -