2 * PROJECT: ReactOS Power Configuration Applet
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/powercfg/hibernate.c
5 * PURPOSE: hibernate tab of applet
6 * PROGRAMMERS: Alexander Wurzinger (Lohnegrim at gmx dot net)
7 * Johannes Anderwald (johannes.anderwald@student.tugraz.at)
9 * Dmitry Chapyshev (lentind@yandex.ru)
13 //typedef long NTSTATUS;
18 BOOLEAN
Pos_InitData();
19 void Adv_InitDialog();
23 Hib_InitDialog(HWND hwndDlg
)
25 SYSTEM_POWER_CAPABILITIES PowerCaps
;
27 TCHAR szSize
[MAX_PATH
];
28 TCHAR szTemp
[MAX_PATH
];
29 ULARGE_INTEGER FreeBytesAvailable
, TotalNumberOfBytes
, TotalNumberOfFreeBytes
;
31 if (GetPwrCapabilities(&PowerCaps
))
33 CheckDlgButton(hwndDlg
,
35 PowerCaps
.HiberFilePresent
? BST_CHECKED
: BST_UNCHECKED
);
37 msex
.dwLength
= sizeof(msex
);
38 if (!GlobalMemoryStatusEx(&msex
))
43 if (GetWindowsDirectory(szTemp
,MAX_PATH
))
45 if (!GetDiskFreeSpaceEx(szTemp
,&FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
46 TotalNumberOfFreeBytes
.QuadPart
= 0;
50 if (!GetDiskFreeSpaceEx(NULL
,&FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
51 TotalNumberOfFreeBytes
.QuadPart
= 0;
54 if (TotalNumberOfFreeBytes
.QuadPart
> 0x100000)
56 if (LoadString(hApplet
, IDS_SIZEMB
, szTemp
, MAX_PATH
))
58 _stprintf(szSize
,szTemp
,TotalNumberOfFreeBytes
.QuadPart
/ 0x100000);
59 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szSize
);
64 if (LoadString(hApplet
, IDS_SIZEBYTS
, szTemp
, MAX_PATH
))
66 _stprintf(szSize
,szTemp
,TotalNumberOfFreeBytes
.QuadPart
);
67 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szSize
);
71 if (msex
.ullTotalPhys
>0x100000)
73 if (LoadString(hApplet
, IDS_SIZEMB
, szTemp
, MAX_PATH
))
75 _stprintf(szSize
,szTemp
,msex
.ullTotalPhys
/0x100000);
76 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
,szSize
);
81 if (LoadString(hApplet
, IDS_SIZEBYTS
, szTemp
, MAX_PATH
))
83 _stprintf(szSize
,szTemp
,msex
.ullTotalPhys
);
84 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
, szSize
);
88 if (TotalNumberOfFreeBytes
.QuadPart
< msex
.ullTotalPhys
&& !PowerCaps
.HiberFilePresent
)
90 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), FALSE
);
91 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), TRUE
);
95 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), FALSE
);
96 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), TRUE
);
102 Hib_SaveData(HWND hwndDlg
)
106 bHibernate
= (BOOLEAN
)(IsDlgButtonChecked(hwndDlg
, IDC_HIBERNATEFILE
) == BST_CHECKED
);
108 if (CallNtPowerInformation(SystemReserveHiberFile
,&bHibernate
, sizeof(bHibernate
), NULL
, 0) == STATUS_SUCCESS
)
112 Hib_InitDialog(hwndDlg
);
119 /* Property page dialog callback */
121 HibernateDlgProc(HWND hwndDlg
,
129 Hib_InitDialog(hwndDlg
);
132 switch(LOWORD(wParam
))
134 case IDC_HIBERNATEFILE
:
135 if (HIWORD(wParam
) == BN_CLICKED
)
137 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
143 LPNMHDR lpnm
= (LPNMHDR
)lParam
;
144 if (lpnm
->code
== (UINT
)PSN_APPLY
)
146 return Hib_SaveData(hwndDlg
);