📄 crandomdatapage.cpp
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: CRandomDataPage.cpp,v 1.10 2002/08/06 20:09:24 dallen Exp $
____________________________________________________________________________*/
#include "pgpClassesConfig.h"
#include "CPGPdiskEngine.h"
#include "CPGPdiskPage.h"
#include "CPGPGlobalRandomPool.h"
#include "CRandomDataPage.h"
#include "PGPdiskHelp.h"
#include "Resource.h"
_USING_PGP
_UNNAMED_BEGIN
// Constants
DWORD WizRandomDataPageHelpIDs[] =
{
IDC_DISKSTATIC1, -1,
IDC_DISKSTATIC2, -1,
IDC_DISKSTATIC3, -1,
IDC_HEADING, -1,
IDC_RANDOM_CAPTION, IDH_PGPDISKUI_WIZRANDOMPAGE_RANDOMBAR,
IDC_RANDOM_BAR, IDH_PGPDISKUI_WIZRANDOMPAGE_RANDOMBAR,
IDC_RANDOMPER_TEXT, IDH_PGPDISKUI_WIZRANDOMPAGE_RANDOMBAR,
0, 0
};
// Static variables
// Necessary ugliness...
CRandomDataPage *PRandDataPage;
HHOOK RandKeyboardHook;
_UNNAMED_END
// Class CRandomDataPage member functions
PGPUInt16
CRandomDataPage::GetDialogId() const
{
return IDD_WIZ_RANDOM;
}
DWORD
CRandomDataPage::GetPageHelpId() const
{
return IDH_PGPDISKUI_WIZRANDOMPAGE;
}
PVOID
CRandomDataPage::GetPageHelpIds() const
{
return WizRandomDataPageHelpIDs;
}
void
CRandomDataPage::ProcessChar(unsigned char nChar)
{
mPRandomPool->AddKeystroke(nChar);
UpdateBar();
}
LRESULT
CALLBACK
CRandomDataPage::KeyboardHook(
INT iCode,
WPARAM wParam,
LPARAM lParam)
{
pgpAssertAddrValid(PRandDataPage, CRandomDataPage);
PRandDataPage->ProcessChar(static_cast<unsigned char>(wParam));
return 1;
}
void
CRandomDataPage::SetDoneCollecting()
{
mRandomBar.SetPos(100);
mRandomPercent.Set(100);
SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
if (IsntNull(RandKeyboardHook))
{
UnhookWindowsHookEx(RandKeyboardHook);
RandKeyboardHook = NULL;
}
}
void
CRandomDataPage::UpdateBar()
{
if (mCheated)
return;
if (mPRandomPool->GetEntropy() >= mEntropyNeeded)
{
SetDoneCollecting();
}
else
{
PGPUInt32 percent = mPRandomPool->GetEntropy()*100 / mEntropyNeeded;
mRandomBar.SetPos(percent);
mRandomPercent.Set(percent);
SetWizButtons(PSWIZB_BACK);
}
}
BOOL
CRandomDataPage::OnInitDialog(HWND focusCtrl)
{
CPGPdiskPage::OnInitDialog(focusCtrl);
mBegunGathering = FALSE;
mRandomPercent.Subclass(GetDlgItem(IDC_RANDOMPER_TEXT));
mRandomBar.Subclass(GetDlgItem(IDC_RANDOM_BAR));
mRandomBar.SetRange(0, 100);
mRandomPercent.Reset();
return FALSE;
}
void
CRandomDataPage::OnLButtonDown(PGPUInt32 keyFlags, CPoint coords)
{
CPGPdiskPage::OnLButtonDown(keyFlags, coords);
#if PGP_DEBUG
mCheated = TRUE;
SetDoneCollecting();
#endif // PGP_DEBUG
}
void
CRandomDataPage::OnMouseMove(PGPUInt32 keyFlags, CPoint coords)
{
CPGPdiskPage::OnMouseMove(keyFlags, coords);
mPRandomPool->MouseMoved();
UpdateBar();
}
PGPBoolean
CRandomDataPage::OnPsnKillActive()
{
PGPBoolean result = CPGPdiskPage::OnPsnSetActive();
if (result)
return result;
if (IsntNull(RandKeyboardHook))
{
UnhookWindowsHookEx(RandKeyboardHook);
RandKeyboardHook = NULL;
}
return FALSE;
}
PGPInt32
CRandomDataPage::OnPsnSetActive()
{
PGPInt32 result = CPGPdiskPage::OnPsnSetActive();
if (result != 0)
return result;
if (!mBegunGathering)
{
mCheated = FALSE;
mEntropyNeeded = CPGPdiskEngine::GetNeededRandomDataSize(
*mPAlgorithm) * PFLConstants::kBitsPerByte * 2;
if (mPRandomPool->GetEntropy() >= mEntropyNeeded)
return -1;
else
mEntropyNeeded += mPRandomPool->GetEntropy();
}
UpdateBar();
PRandDataPage = this;
RandKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHook, NULL,
GetCurrentThreadId());
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -