📄 pwsafedlg.cpp
字号:
cConfig.Get(PWMKEY_CLIPBOARDMETHOD, szTemp);
if(_tcslen(szTemp) != 0) m_nClipboardMethod = _ttoi(szTemp);
else m_nClipboardMethod = 0;
cConfig.Get(PWMKEY_CLIPSECS, szTemp);
if(szTemp[0] != 0)
{
m_dwClipboardSecs = (DWORD)_ttol(szTemp);
if(m_dwClipboardSecs == 0) m_dwClipboardSecs = 10 + 1;
if(m_dwClipboardSecs == (DWORD)(-1)) m_dwClipboardSecs = 10 + 1;
}
else m_dwClipboardSecs = 10 + 1;
WORD wATHotKeyVK = (WORD)(_T('A'));
WORD wATHotKeyMod = HOTKEYF_CONTROL | HOTKEYF_ALT;
DWORD dwDefaultATHotKey = ((DWORD)wATHotKeyMod << 16) | (DWORD)wATHotKeyVK;
cConfig.Get(PWMKEY_AUTOTYPEHOTKEY, szTemp);
if(szTemp[0] != 0) m_dwATHotKey = (DWORD)_ttol(szTemp);
else m_dwATHotKey = dwDefaultATHotKey;
cConfig.Get(PWMKEY_DEFAULTEXPIRE, szTemp);
if(szTemp[0] != 0) m_dwDefaultExpire = (DWORD)_ttol(szTemp);
else m_dwDefaultExpire = 0;
m_bWindowsNewLine = TRUE; // Assume Windows
cConfig.Get(PWMKEY_NEWLINE, szTemp);
if(_tcsicmp(szTemp, _T("Unix")) == 0) m_bWindowsNewLine = FALSE;
cConfig.Get(PWMKEY_IMGBTNS, szTemp);
if(_tcslen(szTemp) != 0)
{
if(_tcscmp(szTemp, _T("False")) == 0) m_bImgButtons = FALSE;
else m_bImgButtons = TRUE;
}
else m_bImgButtons = TRUE;
NewGUI_SetImgButtons(m_bImgButtons);
m_bDisableUnsafe = cConfig.GetBool(PWMKEY_DISABLEUNSAFE, FALSE);
m_bDisableUnsafeAtStart = m_bDisableUnsafe;
cConfig.Get(PWMKEY_AUTOSORT, szTemp);
if(_tcslen(szTemp) != 0) m_nAutoSort = _ttoi(szTemp);
else m_nAutoSort = 0;
m_bUsePuttyForURLs = cConfig.GetBool(PWMKEY_USEPUTTYFORURLS, FALSE);
m_bSaveOnLATMod = cConfig.GetBool(PWMKEY_SAVEONLATMOD, FALSE);
m_bEntryGrid = cConfig.GetBool(PWMKEY_ENTRYGRID, FALSE);
m_bAlwaysOnTop = cConfig.GetBool(PWMKEY_ALWAYSTOP, FALSE);
m_bShowTitle = cConfig.GetBool(PWMKEY_SHOWTITLE, TRUE);
m_bShowUserName = cConfig.GetBool(PWMKEY_SHOWUSER, TRUE);
m_bShowURL = cConfig.GetBool(PWMKEY_SHOWURL, TRUE);
m_bShowPassword = cConfig.GetBool(PWMKEY_SHOWPASS, TRUE);
m_bShowNotes = cConfig.GetBool(PWMKEY_SHOWNOTES, TRUE);
m_bShowCreation = cConfig.GetBool(PWMKEY_SHOWCREATION, FALSE);
m_bShowLastMod = cConfig.GetBool(PWMKEY_SHOWLASTMOD, FALSE);
m_bShowLastAccess = cConfig.GetBool(PWMKEY_SHOWLASTACCESS, FALSE);
m_bShowExpire = cConfig.GetBool(PWMKEY_SHOWEXPIRE, FALSE);
m_bShowUUID = cConfig.GetBool(PWMKEY_SHOWUUID, FALSE);
m_bShowAttach = cConfig.GetBool(PWMKEY_SHOWATTACH, FALSE);
CPwSafeDlg::m_bUseLocalTimeFormat = cConfig.GetBool(PWMKEY_USELOCALTIMEFMT, TRUE);
m_bPasswordStars = cConfig.GetBool(PWMKEY_HIDESTARS, TRUE);
m_bUserStars = cConfig.GetBool(PWMKEY_HIDEUSERS, FALSE);
m_bLockOnMinimize = cConfig.GetBool(PWMKEY_LOCKMIN, TRUE);
m_bMinimizeToTray = cConfig.GetBool(PWMKEY_MINTRAY, TRUE);
m_bStartMinimized = cConfig.GetBool(PWMKEY_STARTMINIMIZED, FALSE);
m_bCloseMinimizes = cConfig.GetBool(PWMKEY_CLOSEMIN, FALSE);
m_bBackupEntries = cConfig.GetBool(PWMKEY_BACKUPENTRIES, TRUE);
m_bSecureEdits = cConfig.GetBool(PWMKEY_SECUREEDITS, TRUE);
m_bSingleClickTrayIcon = cConfig.GetBool(PWMKEY_SINGLECLICKTRAY, FALSE);
m_bQuickFindIncBackup = cConfig.GetBool(PWMKEY_QUICKFINDINCBK, TRUE);
m_bDeleteBackupsOnSave = cConfig.GetBool(PWMKEY_DELETEBKONSAVE, FALSE);
m_bDisableAutoType = cConfig.GetBool(PWMKEY_DISABLEAUTOTYPE, FALSE);
m_bCopyURLs = cConfig.GetBool(PWMKEY_COPYURLS, FALSE);
m_bExitInsteadOfLockAT = cConfig.GetBool(PWMKEY_EXITINSTEADLOCK, FALSE);
m_bAllowSaveIfModifiedOnly = cConfig.GetBool(PWMKEY_ALLOWSAVEIFMODIFIEDONLY, FALSE);
m_bShowToolBar = cConfig.GetBool(PWMKEY_SHOWTOOLBAR, TRUE);
m_bShowFullPath = cConfig.GetBool(PWMKEY_SHOWFULLPATH, FALSE);
m_bSimpleTANView = cConfig.GetBool(PWMKEY_SIMPLETANVIEW, TRUE);
m_bShowTANIndices = cConfig.GetBool(PWMKEY_SHOWTANINDICES, TRUE);
m_bCheckForUpdate = cConfig.GetBool(PWMKEY_CHECKFORUPDATE, FALSE);
m_bLockOnWinLock = cConfig.GetBool(PWMKEY_LOCKONWINLOCK, FALSE);
m_remoteControl.InitStatic(&m_mgr, this->m_hWnd);
m_remoteControl.EnableRemoteControl(cConfig.GetBool(PWMKEY_ENABLEREMOTECTRL, FALSE));
cConfig.Get(PWMKEY_ROWCOLOR, szTemp);
if(_tcslen(szTemp) != 0)
{
COLORREF cref = (COLORREF)_ttol(szTemp);
m_cList.SetRowColorEx(cref);
}
cConfig.Get(PWMKEY_AUTOTYPEMETHOD, szTemp);
if(_tcslen(szTemp) != 0) m_nAutoTypeMethod = _ttoi(szTemp);
else m_nAutoTypeMethod = ATM_DROPBACK;
cConfig.Get(PWMKEY_URLOVERRIDE, szTemp);
if(_tcslen(szTemp) != 0) m_strURLOverride = szTemp;
else m_strURLOverride = _T("");
m_nLockTimeDef = -1;
cConfig.Get(PWMKEY_LOCKTIMER, szTemp);
if(_tcslen(szTemp) != 0) m_nLockTimeDef = _ttol(szTemp);
m_nLockCountdown = m_nLockTimeDef;
m_bAutoShowExpired = cConfig.GetBool(PWMKEY_AUTOSHOWEXPIRED, FALSE);
m_bAutoShowExpiredSoon = cConfig.GetBool(PWMKEY_AUTOSHOWEXPIREDS, FALSE);
m_bEntryView = cConfig.GetBool(PWMKEY_ENTRYVIEW, TRUE);
m_bColAutoSize = cConfig.GetBool(PWMKEY_COLAUTOSIZE, TRUE);
// Translate the menu
BCMenu *pSubMenu = &m_menu;
const TCHAR *pSuffix = _T("");
CString strItem, strNew;
int nItem = 0, nSub = 0;
UINT nID;
while(1)
{
if(pSubMenu->GetMenuString((UINT)nItem, strItem, MF_BYPOSITION) == FALSE) break;
pSuffix = _GetCmdAccelExt(strItem);
strNew = TRL_VAR(strItem);
if(_tcslen(pSuffix) != 0) { strNew += _T("\t"); strNew += pSuffix; }
nID = pSubMenu->GetMenuItemID(nItem);
if(pSubMenu->ModifyMenu(nItem, MF_BYPOSITION | MF_STRING, nID, strNew) == FALSE) { ASSERT(FALSE); }
nItem++;
}
pSubMenu = (BCMenu *)m_menu.GetSubMenu(nSub);
while(1)
{
_TranslateMenu(pSubMenu, TRUE, &m_bCopyURLs);
pSubMenu = (BCMenu *)m_menu.GetSubMenu(nSub);
nSub++;
if(pSubMenu == NULL) break;
}
pSubMenu = (BCMenu *)m_menu.GetSubMenu(TRL("&Tools")); ASSERT(pSubMenu != NULL);
if(pSubMenu != NULL) m_uOriginalExtrasMenuItemCount = pSubMenu->GetMenuItemCount();
else m_uOriginalExtrasMenuItemCount = MENU_EXTRAS_ITEMCOUNT;
m_menu.LoadToolbar(IDR_INFOICONS, IDB_INFOICONS_EX);
m_bMenu = SetMenu(&m_menu); ASSERT(m_bMenu == TRUE);
RebuildContextMenus();
RECT rectClient;
RECT rectSB;
GetClientRect(&rectClient);
rectSB.top = rectClient.bottom - rectClient.top - 8;
rectSB.bottom = rectClient.bottom - rectClient.top;
rectSB.left = 0;
rectSB.right = rectClient.right - rectClient.left;
m_sbStatus.Create(WS_CHILD | WS_VISIBLE | CCS_BOTTOM | SBARS_SIZEGRIP | SBT_TOOLTIPS,
rectSB, this, AFX_IDW_STATUS_BAR);
// m_sbStatus.SetSimple(TRUE);
m_sbStatus.SetParts(3, g_nIndicatorWidths);
m_sbStatus.SetSimple(FALSE);
::SendMessage(m_sbStatus.m_hWnd, SB_SETTIPTEXT, 0, (LPARAM)TRL("Total number of groups / entries"));
::SendMessage(m_sbStatus.m_hWnd, SB_SETTIPTEXT, 1, (LPARAM)TRL("Number of selected entries (number of entries in the list)"));
::SendMessage(m_sbStatus.m_hWnd, SB_SETTIPTEXT, 2, (LPARAM)TRL("Status"));
m_sbStatus.SetText(_T(""), 0, 0); m_sbStatus.SetText(_T(""), 1, 0); m_sbStatus.SetText(_T(""), 2, 0);
SetStatusTextEx(TRL("Ready."));
// m_ilIcons.Create(CPwSafeApp::GetClientIconsResourceID(), 16, 1, RGB(255,0,255)); // purple is transparent
CPwSafeApp::CreateHiColorImageList(&m_ilIcons, IDB_CLIENTICONS_EX, 16);
m_cList.SetImageList(&m_ilIcons, LVSIL_SMALL);
m_cGroups.SetImageList(&m_ilIcons, TVSIL_NORMAL);
m_bShowColumn[0] = m_bShowTitle; m_bShowColumn[1] = m_bShowUserName;
m_bShowColumn[2] = m_bShowURL; m_bShowColumn[3] = m_bShowPassword;
m_bShowColumn[4] = m_bShowNotes; m_bShowColumn[5] = m_bShowCreation;
m_bShowColumn[6] = m_bShowLastMod; m_bShowColumn[7] = m_bShowLastAccess;
m_bShowColumn[8] = m_bShowExpire; m_bShowColumn[9] = m_bShowUUID;
m_bShowColumn[10] = m_bShowAttach;
if(m_bShowTitle == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_TITLE, MF_BYCOMMAND | uState);
if(m_bShowUserName == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_USERNAME, MF_BYCOMMAND | uState);
if(m_bShowURL == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_URL, MF_BYCOMMAND | uState);
if(m_bShowPassword == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_PASSWORD, MF_BYCOMMAND | uState);
if(m_bShowNotes == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_NOTES, MF_BYCOMMAND | uState);
if(m_bShowCreation == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_CREATION, MF_BYCOMMAND | uState);
if(m_bShowLastMod == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_LASTMOD, MF_BYCOMMAND | uState);
if(m_bShowLastAccess == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_LASTACCESS, MF_BYCOMMAND | uState);
if(m_bShowExpire == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_EXPIRE, MF_BYCOMMAND | uState);
if(m_bShowUUID == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_UUID, MF_BYCOMMAND | uState);
if(m_bShowAttach == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_ATTACH, MF_BYCOMMAND | uState);
if(m_bPasswordStars == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_HIDESTARS, MF_BYCOMMAND | uState);
if(m_bUserStars == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_HIDEUSERS, MF_BYCOMMAND | uState);
if(m_bAlwaysOnTop == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_ALWAYSONTOP, MF_BYCOMMAND | uState);
if(m_bShowToolBar == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_SHOWTOOLBAR, MF_BYCOMMAND | uState);
if(m_bEntryView == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_ENTRYVIEW, MF_BYCOMMAND | uState);
if(m_bSimpleTANView == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_SIMPLETANVIEW, MF_BYCOMMAND | uState);
if(m_bShowTANIndices == TRUE) uState = MF_CHECKED; else uState = MF_UNCHECKED;
m_menu.CheckMenuItem(ID_VIEW_SHOWTANINDICES, MF_BYCOMMAND | uState);
_CalcColumnSizes();
// Windows computes the sizes wrong the first time because there aren't
// any 16x16 icons in the list yet
m_cList.InsertColumn(0, TRL("Title"), LVCFMT_LEFT, 10 - 4, 0);
m_cList.InsertColumn(1, TRL("User Name"), LVCFMT_LEFT, 10 - 4, 1);
m_cList.InsertColumn(2, TRL("URL"), LVCFMT_LEFT, 10 - 3, 2);
m_cList.InsertColumn(3, TRL("Password"), LVCFMT_LEFT, 10 - 3, 3);
m_cList.InsertColumn(4, TRL("Notes"), LVCFMT_LEFT, 10 - 3, 4);
m_cList.InsertColumn(5, TRL("Creation Time"), LVCFMT_LEFT, 10 - 3, 4);
m_cList.InsertColumn(6, TRL("Last Modification"), LVCFMT_LEFT, 10 - 3, 4);
m_cList.InsertColumn(7, TRL("Last Access"), LVCFMT_LEFT, 10 - 3, 4);
m_cList.InsertColumn(8, TRL("Expires"), LVCFMT_LEFT, 10 - 3, 4);
m_cList.InsertColumn(9, TRL("UUID"), LVCFMT_LEFT, 10 - 3, 4);
m_cList.InsertColumn(10, TRL("Attachment"), LVCFMT_LEFT, 10 - 3, 4);
ASSERT(LVM_SETEXTENDEDLISTVIEWSTYLE == (0x1000 + 54));
_SetListParameters();
cConfig.Get(PWMKEY_LISTFONT, szTemp);
if(_tcslen(szTemp) == 0) _tcscpy_s(szTemp, _countof(szTemp), _T("MS Shell Dlg;8,0000"));
_ParseSpecAndSetFont(szTemp);
// int nColumnWidth;
// RECT rect;
// m_cGroups.GetClientRect(&rect);
// nColumnWidth = rect.right - rect.left - GetSystemMetrics(SM_CXVSCROLL);
// nColumnWidth -= 8;
// m_cGroups.InsertColumn(0, TRL("Password Groups"), LVCFMT_LEFT, nColumnWidth, 0);
// m_cGroups.PostMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_SI_MENU | LVS_EX_INFOTIP);
m_cGroups.ModifyStyle(0, TVS_TRACKSELECT, 0);
unsigned long ul;
ul = TestCryptoImpl();
if(ul != 0)
{
CString str;
str = TRL("The following self-tests failed:");
str += _T("\r\n");
if(ul & TI_ERR_SHAVAR32)
{ str += TRL("- SHA 32-bit variables"); str += _T("\r\n"); }
if(ul & TI_ERR_SHAVAR64)
{ str += TRL("- SHA 64-bit variables"); str += _T("\r\n"); }
if(ul & TI_ERR_SHACMP256)
{ str += TRL("- SHA-256 test vector(s)"); str += _T("\r\n"); }
if(ul & TI_ERR_SHACMP512)
{ str += TRL("- SHA-512 test vector(s)"); str += _T("\r\n"); }
if(ul & TI_ERR_RIJNDAEL_ENCRYPT)
{ str += TRL("- Rijndael encryption"); str += _T("\r\n"); }
if(ul & TI_ERR_RIJNDAEL_DECRYPT)
{ str += TRL("- Rijndael decryption"); str += _T("\r\n"); }
if(ul & TI_ERR_ARCFOUR_CRYPT)
{ str += TRL("- Arcfour crypto routine"); str += _T("\r\n"); }
if(ul & TI_ERR_TWOFISH)
{ str += TRL("- Twofish algorithm"); str += _T("\r\n"); }
str += _T("\r\n");
str += TRL("The program will exit now.");
MessageBox(str, TRL("Self-Test(s) Failed"), MB_OK | MB_ICONWARNING);
OnCancel();
}
m_strFile.Empty(); m_strFileAbsolute.Empty();
m_cList.EnableWindow(FALSE);
m_cGroups.EnableWindow(FALSE);
// "Initialize" the xorshift pseudo-random number generator
CNewRandom nr;
DWORD dwSkip, dwPos;
nr.GetRandomBuffer((BYTE *)&dwSkip, 4);
dwSkip &= 0x03FF;
for(dwPos = 0; dwPos < dwSkip; ++dwPos) randXorShift();
// CRestartManagerEx::Register();
// _UpdateTitleBar(); // Updated by _UpdateToolBar()
ProcessResize();
UpdateGroupList();
UpdatePasswordList();
m_bTimer = TRUE;
m_nClipboardCountdown = -1;
SetTimer(APPWND_TIMER_ID, 1000, NULL);
SetTimer(APPWND_TIMER_ID_UPDATER, 500, NULL);
m_bRememberLast = cConfig.GetBool(PWMKEY_REMEMBERLAST, TRUE);
m_strLastDb.Empty();
m_bOpenLastDb = cConfig.GetBool(PWMKEY_OPENLASTB, TRUE);
m_bAutoSaveDb = cConfig.GetBool(PWMKEY_AUTOSAVEB, FALSE);
m_reEntryView.LimitText(0);
m_reEntryView.SetEventMask(ENM_MOUSEEVENTS | ENM_LINK);
m_reEntryView.SendMessage(EM_AUTOURLDETECT, TRUE, 0);
m_reEntryView.SetBackgroundColor(FALSE, GetSysColor(COLOR_3DFACE));
/* LVBKIMAGE lvbk;
TCHAR szMe[MAX_PATH * 2];
GetModuleFileName(NULL, szMe, MAX_PATH * 2);
CString strImagePath;
strImagePath.Format(_T("res://%s/#2/#199"), szMe);
LPCTSTR lpImage = strImagePath.LockBuffer();
ZeroMemory(&lvbk, sizeof(LVBKIMAGE));
lvbk.cchImageMax = _tcslen(lpImage);
lvbk.pszImage = (LPTSTR)lpImage;
lvbk.ulFlags = LVBKIF_SOURCE_URL | LVBKIF_STYLE_NORMAL;
lvbk.xOffsetPercent = 90;
lvbk.yOffsetPercent = 90;
ListView_SetBkImage(m_cList.m_hWnd, &lvbk);
strImagePath.UnlockBuffer(); */
m_hTrayIconNormal = AfxGetApp()->LoadIcon(IDI_UNLOCKED);
m_hTrayIconLocked = AfxGetApp()->LoadIcon(IDI_LOCKED);
CMsgRelayWnd::SetRelayTarget(this->m_hWnd);
CMsgRelayWnd::AddRelayedMessage(WM_QUERYENDSESSION);
CMsgRelayWnd::AddRelayedMessage(WM_ENDSESSION);
CMsgRelayWnd::AddRelayedMessage(WM_COPYDATA);
CMsgRelayWnd::AddRelayedMessage(WM_WTSSESSION_CHANGE);
CMsgRelayWnd::AddRelayedMessage(WM_REG_TASKBARCREATED);
CMsgRelayWnd::AddRelayedMessage(WM_REG_PROCESSMAILSLOT);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -