📄 maindialog.cpp
字号:
PriVal = ABOVE_NORMAL_PRIORITY_CLASS;
else
if (PriID == PriNormalID)
PriVal = NORMAL_PRIORITY_CLASS;
else
if (PriID == PriBelowNormID)
PriVal = BELOW_NORMAL_PRIORITY_CLASS;
else
if (PriID == PriIdleID)
PriVal = IDLE_PRIORITY_CLASS;
if (!GetRegKeys (&RegKey))
return;
RegSetValueEx
(
RegKey,
L"Default Action",
0,
REG_DWORD,
(CONST BYTE *)&DefragVal,
sizeof (DefragVal)
);
RegSetValueEx
(
RegKey,
L"Process Priority",
0,
REG_DWORD,
(CONST BYTE *)&PriVal,
sizeof (PriVal)
);
DoneRegKey (RegKey);
return;
}
void LoadSettings (HWND Dlg)
{
DefragType DType;
DWORD DTypeVal;
LRESULT DefragID;
DWORD PriVal;
LRESULT PriID;
HKEY RegKey;
DWORD RegType;
DWORD RegSize;
LONG Error;
if (!GetRegKeys (&RegKey))
return;
RegSize = sizeof (DTypeVal);
RegType = REG_DWORD;
Error = RegQueryValueEx
(
RegKey,
L"Default Action",
0,
&RegType,
(BYTE *)&DTypeVal,
&RegSize
);
if (Error != ERROR_SUCCESS)
DTypeVal = DefragAnalyze;
Error = RegQueryValueEx
(
RegKey,
L"Process Priority",
0,
&RegType,
(BYTE *)&PriVal,
&RegSize
);
DoneRegKey (RegKey);
if (Error != ERROR_SUCCESS)
PriVal = NORMAL_PRIORITY_CLASS;
DType = (DefragType) DTypeVal;
switch (DType)
{
default:
case DefragAnalyze:
DefragID = AnalyzeID;
break;
case DefragFast:
DefragID = FastID;
break;
case DefragExtensive:
DefragID = ExtensiveID;
break;
}
switch (PriVal)
{
case HIGH_PRIORITY_CLASS:
PriID = PriHighID;
break;
case ABOVE_NORMAL_PRIORITY_CLASS:
PriID = PriAboveNormID;
break;
default:
case NORMAL_PRIORITY_CLASS:
PriID = PriNormalID;
break;
case BELOW_NORMAL_PRIORITY_CLASS:
PriID = PriBelowNormID;
break;
case IDLE_PRIORITY_CLASS:
PriID = PriIdleID;
break;
}
SendDlgItemMessage (Dlg, IDC_PRIORITY_LIST, CB_SETCURSEL, PriID, 0);
SendDlgItemMessage (Dlg, IDC_METHODS_LIST, CB_SETCURSEL, DefragID, 0);
return;
}
#define IDLETIME 25
wstring OldWindowText = L"";
INT_PTR CALLBACK MainDialogProc (HWND Dlg, UINT Msg, WPARAM WParam, LPARAM LParam)
{
static bool ReEntrance = false;
switch (Msg)
{
case WM_INITDIALOG:
Stopping = false;
SetWindowText (Dlg, GetDefaultTitle().c_str());
SetDisables (Dlg);
InitDialog (Dlg);
SetTimer (Dlg, 1, IDLETIME, NULL);
SetClassLong (Dlg, GCL_HICON, (LONG) LoadIcon (GlobalHInstance, MAKEINTRESOURCE(IDI_ICON)));
QuitWhenDone = false;
LoadSettings (Dlg);
UpdatePriority (Dlg);
return (1);
case WM_TIMER:
if (Defrag != NULL && !ReEntrance)
{
wstring NewTitle;
SendMessage (Dlg, WM_UPDATEINFO, 0, 0);
NewTitle = GetDefragTitle ();
if (NewTitle != OldWindowText)
{
OldWindowText = NewTitle;
SetWindowText (Dlg, NewTitle.c_str());
}
if (Defrag->IsDoneYet() || Defrag->HasError())
{ // This is the code executed when defragging is finished (or stopped :)
if (Defrag->GetDefragType() == DefragAnalyze &&
!Defrag->HasError() &&
!Stopping)
{ // Show report
ReEntrance = true;
DialogBoxParam (GlobalHInstance, MAKEINTRESOURCE (IDD_REPORT),
Dlg, ReportDialogProc, (LPARAM) Defrag);
ReEntrance = false;
}
delete Defrag;
Defrag = NULL;
SetDisables (Dlg);
SetWindowText (Dlg, GetDefaultTitle().c_str());
Stopping = false;
if (QuitWhenDone)
SendMessage (GetDlgItem (Dlg, IDC_QUIT), BM_CLICK, 0, 0);
}
}
SetTimer (Dlg, 1, IDLETIME, NULL);
return (0);
case WM_UPDATEINFO:
UpdateDefragInfo (Dlg);
return (1);
case WM_CLOSE:
SendMessage (GetDlgItem (Dlg, IDC_QUIT), BM_CLICK, 0, 0);
return (1);
case WM_COMMAND:
switch (LOWORD(WParam))
{
case IDC_PRIORITY_LIST:
UpdatePriority (Dlg);
return (1);
case ID_MAIN_HELP:
ShellExecute (Dlg, L"open", L"Fraginator.chm", L"", L".", SW_SHOW);
return (1);
case IDC_QUIT:
if (Defrag == NULL)
{ // This is the code executing when quitting
SaveSettings (Dlg);
EndDialog (Dlg, 0);
}
else
{ // Tell defragging to finish and disable our button
QuitWhenDone = true;
SendMessage (GetDlgItem (Dlg, IDC_STARTSTOP), BM_CLICK, 0, 0);
EnableWindow (GetDlgItem (Dlg, IDC_QUIT), FALSE);
}
return (1);
case IDC_STARTSTOP:
if (Defrag == NULL)
{ // L"Start"
wchar_t Drive[10];
LRESULT ID;
DefragType Method;
HANDLE H;
if (Defrag != NULL)
return (1);
SendMessage (GetDlgItem (Dlg, IDC_DRIVES_LIST), WM_GETTEXT,
sizeof (Drive) - 1, (LPARAM) Drive);
if (wcslen(Drive) != 2 || Drive[1] != L':')
return (1);
ID = SendMessage (GetDlgItem (Dlg, IDC_METHODS_LIST), CB_GETCURSEL, 0, 0);
Method = DefragInvalid;
if (ID == AnalyzeID)
Method = DefragAnalyze;
else
if (ID == FastID)
Method = DefragFast;
else
if (ID == ExtensiveID)
Method = DefragExtensive;
if (Method != DefragInvalid)
{
Defrag = StartDefragThread (Drive, Method, H);
Defrag->SetDoLimitLength (false);
SetWindowText (Dlg, GetDefragTitle().c_str());
SetDisables (Dlg);
}
}
else
{ // L"Stop"
Stopping = true;
Defrag->Stop ();
EnableWindow (GetDlgItem (Dlg, IDC_STARTSTOP), FALSE);
EnableWindow (GetDlgItem (Dlg, IDC_QUIT), FALSE);
}
return (1);
}
}
// Otherwise, return 0 to say we did not process the message.
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -