📄 pwsafe.cpp
字号:
// _tcscpy_s(tszTemp, _countof(tszTemp), TRL("&Open with KeePass"));
strTemp = TRL("&Open with KeePass");
dw = static_cast<DWORD>((strTemp.length() + 1) * sizeof(TCHAR));
l = RegSetValueEx(hTemp, _T(""), 0, REG_SZ, (CONST BYTE *)strTemp.c_str(), dw);
ASSERT(l == ERROR_SUCCESS); if(l != ERROR_SUCCESS) { RegCloseKey(hTemp); RegCloseKey(hShell); RegCloseKey(hBase); return FALSE; }
l = RegCreateKey(hTemp, _T("command"), &hTemp2);
ASSERT(l == ERROR_SUCCESS); if(l != ERROR_SUCCESS) return FALSE;
// _tcscpy_s(tszTemp, _countof(tszTemp), _T("\""));
strTemp = _T("\"");
// _tcscat_s(tszTemp, _countof(tszTemp), tszMe);
strTemp += strMe;
// _tcscat_s(tszTemp, _countof(tszTemp), _T("\" \"%1\""));
strTemp += _T("\" \"%1\"");
dw = static_cast<DWORD>((strTemp.length() + 1) * sizeof(TCHAR));
l = RegSetValueEx(hTemp2, _T(""), 0, REG_SZ, (CONST BYTE *)strTemp.c_str(), dw);
ASSERT(l == ERROR_SUCCESS); if(l != ERROR_SUCCESS) { RegCloseKey(hTemp); RegCloseKey(hShell); RegCloseKey(hBase); return FALSE; }
VERIFY(RegCloseKey(hTemp2) == ERROR_SUCCESS);
VERIFY(RegCloseKey(hTemp) == ERROR_SUCCESS);
VERIFY(RegCloseKey(hShell) == ERROR_SUCCESS);
VERIFY(RegCloseKey(hBase) == ERROR_SUCCESS);
return TRUE;
}
BOOL CPwSafeApp::UnregisterShellAssociation()
{
HKEY hBase, hShell, hOpen, hCommand;
LONG l;
l = RegOpenKeyEx(HKEY_CLASSES_ROOT, _T(".kdb"), 0, KEY_WRITE, &hBase);
if(l != ERROR_SUCCESS) return FALSE;
RegDeleteValue(hBase, _T(""));
VERIFY(RegCloseKey(hBase) == ERROR_SUCCESS);
VERIFY(RegDeleteKey(HKEY_CLASSES_ROOT, _T(".kdb")) == ERROR_SUCCESS);
l = RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("kdbfile"), 0, KEY_WRITE, &hBase);
if(l != ERROR_SUCCESS) return FALSE;
l = RegOpenKeyEx(hBase, _T("shell"), 0, KEY_WRITE, &hShell);
if(l != ERROR_SUCCESS) return FALSE;
l = RegOpenKeyEx(hShell, _T("open"), 0, KEY_WRITE, &hOpen);
if(l != ERROR_SUCCESS) return FALSE;
l = RegOpenKeyEx(hOpen, _T("command"), 0, KEY_WRITE, &hCommand);
if(l != ERROR_SUCCESS) return FALSE;
RegDeleteValue(hCommand, _T(""));
VERIFY(RegCloseKey(hCommand) == ERROR_SUCCESS);
RegDeleteValue(hOpen, _T(""));
VERIFY(RegCloseKey(hOpen) == ERROR_SUCCESS);
RegDeleteValue(hShell, _T(""));
VERIFY(RegCloseKey(hShell) == ERROR_SUCCESS);
RegDeleteValue(hBase, _T(""));
RegDeleteValue(hBase, _T("AlwaysShowExt"));
VERIFY(RegCloseKey(hBase) == ERROR_SUCCESS);
return TRUE;
}
BOOL CPwSafeApp::GetStartWithWindows()
{
HKEY h = NULL;
LONG l;
TCHAR tszBuf[512];
DWORD dwSize = 510;
l = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_QUERY_VALUE, &h);
if(l != ERROR_SUCCESS) return FALSE;
DWORD dwType = REG_SZ;
if(RegQueryValueEx(h, _T("KeePass Password Safe"), NULL, &dwType, (LPBYTE)tszBuf, &dwSize) != ERROR_SUCCESS)
{
RegCloseKey(h); h = NULL;
return FALSE;
}
RegCloseKey(h); h = NULL;
if((_tcslen(tszBuf) > 0) && (tszBuf[0] != _T('-'))) return TRUE;
return FALSE;
}
BOOL CPwSafeApp::SetStartWithWindows(BOOL bAutoStart)
{
HKEY h = NULL;
// TCHAR tszBuf[512];
LONG l;
l = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_WRITE, &h);
if(l != ERROR_SUCCESS) return FALSE;
if(bAutoStart == TRUE)
{
// GetModuleFileName(NULL, tszBuf, 510);
std_string strPath = Executable::instance().getFullPathName();
DWORD uPathLen = static_cast<DWORD>(strPath.length());
if(uPathLen > 0)
{
if(strPath[0] != _T('\"'))
{
strPath = std_string(_T("\"")) + strPath + std_string(_T("\""));
uPathLen = static_cast<DWORD>(strPath.length()); // Update length
}
}
DWORD dwSize = (uPathLen + 1) * sizeof(TCHAR);
l = RegSetValueEx(h, _T("KeePass Password Safe"), 0, REG_SZ, (LPBYTE)strPath.c_str(), dwSize);
if(l != ERROR_SUCCESS)
{
RegCloseKey(h); h = NULL;
return FALSE;
}
}
else // bAutoStart == FALSE)
{
l = RegDeleteValue(h, _T("KeePass Password Safe"));
if(l != ERROR_SUCCESS)
{
RegCloseKey(h); h = NULL;
return FALSE;
}
}
RegCloseKey(h); h = NULL;
return TRUE;
}
/* BOOL CPwSafeApp::ParseCurrentCommandLine(CString *psFile, LPCTSTR *lpPassword, LPCTSTR *lpKeyFile, LPCTSTR *lpPreSelectPath)
{
long i;
BOOL bFirst = TRUE;
ASSERT(psFile != NULL); if(psFile == NULL) return FALSE;
psFile->Empty();
ASSERT(lpPassword != NULL); if(lpPassword == NULL) return FALSE;
*lpPassword = NULL;
ASSERT(lpKeyFile != NULL); if(lpKeyFile == NULL) return FALSE;
*lpKeyFile = NULL;
ASSERT(lpPreSelectPath != NULL); if(lpPreSelectPath == NULL) return FALSE;
*lpPreSelectPath = NULL;
if(__argc <= 1) return FALSE;
for(i = 1; i < (long)__argc; i++)
{
if((_tcsnicmp(__targv[i], _T("-pw:"), 4) == 0) && (_tcslen(__targv[i]) > 4))
*lpPassword = &__targv[i][4];
else if((_tcsnicmp(__targv[i], _T("/pw:"), 4) == 0) && (_tcslen(__targv[i]) > 4))
*lpPassword = &__targv[i][4];
else if((_tcsnicmp(__targv[i], _T("-keyfile:"), 9) == 0) && (_tcslen(__targv[i]) > 9))
*lpKeyFile = &__targv[i][9];
else if((_tcsnicmp(__targv[i], _T("/keyfile:"), 9) == 0) && (_tcslen(__targv[i]) > 9))
*lpKeyFile = &__targv[i][9];
else if((_tcsnicmp(__targv[i], _T("-preselect:"), 11) == 0) && (_tcslen(__targv[i]) > 11))
*lpPreSelectPath = &__targv[i][11];
else if((_tcsnicmp(__targv[i], _T("/preselect:"), 11) == 0) && (_tcslen(__targv[i]) > 11))
*lpPreSelectPath = &__targv[i][11];
else if((_tcsnicmp(__targv[i], _T("-ext:"), 5) == 0) && (_tcslen(__targv[i]) > 5))
{ // Ignore this parameter
}
else if((_tcsnicmp(__targv[i], _T("/ext:"), 5) == 0) && (_tcslen(__targv[i]) > 5))
{ // Ignore this parameter
}
else
{
if(bFirst != TRUE) *psFile += _T(" ");
*psFile += __targv[i];
bFirst = FALSE;
}
}
psFile->TrimLeft(); psFile->TrimRight();
if(psFile->GetLength() == 0) return FALSE;
if(psFile->Left(1) == _T("\"")) *psFile = psFile->Right(psFile->GetLength() - 1);
if(psFile->GetLength() == 0) return FALSE;
psFile->TrimLeft(); psFile->TrimRight();
if(psFile->GetLength() == 0) return FALSE;
if(psFile->Right(1) == _T("\"")) *psFile = psFile->Left(psFile->GetLength() - 1);
if(psFile->GetLength() == 0) return FALSE;
psFile->TrimLeft(); psFile->TrimRight();
if(psFile->GetLength() == 0) return FALSE;
return TRUE;
} */
void CPwSafeApp::CreateHiColorImageList(CImageList *pImageList, WORD wResourceID, int czSize)
{
ASSERT(pImageList != NULL); if(pImageList == NULL) return;
CBitmap bmpImages;
VERIFY(bmpImages.LoadBitmap(MAKEINTRESOURCE(wResourceID)));
VERIFY(pImageList->Create(czSize, czSize, ILC_COLOR24 | ILC_MASK, bmpImages.GetBitmapDimension().cx / czSize, 0));
pImageList->Add(&bmpImages, RGB(255,0,255));
bmpImages.DeleteObject();
}
BOOL CPwSafeApp::IsMBThreadACP()
{
if((g_uThreadACP == 932) || (g_uThreadACP == 936) || (g_uThreadACP == 950)) return TRUE;
return FALSE;
}
#pragma warning(push)
#pragma warning(disable: 4310) // Type cast shortens constant value
TCHAR CPwSafeApp::GetPasswordCharacter()
{
if((IsMBThreadACP() == TRUE) || (g_bForceSimpleAsterisks == TRUE))
return _T('*');
return (TCHAR)0xB7;
}
#pragma warning(pop)
LPCTSTR CPwSafeApp::GetPasswordFont()
{
if((IsMBThreadACP() == TRUE) || (g_bForceSimpleAsterisks == TRUE))
return g_pFontNameNormal;
return (TCHAR *)g_pFontNameSymbol;
}
BOOL CPwSafeApp::ProcessControlCommands()
{
CString strCmdLine = (LPCTSTR)GetCommandLine();
strCmdLine.Trim(_T("\"' \t\r\n\\$%"));
strCmdLine.MakeLower();
if(strCmdLine.GetLength() >= 6)
{
if((strCmdLine.Right(10) == _T("--exit-all")) ||
(strCmdLine.Right(9) == _T("/exit-all")))
{
::SendMessage(HWND_BROADCAST, CPwSafeDlg::GetKeePassControlMessageID(),
KPCM_EXIT, 0);
return TRUE;
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -