3 * PROJECT: ReactOS Power Configuration Applet
4 * LICENSE: GPL - See COPYING in the top level directory
5 * FILE: dll/cpl/powercfg/hibernate.c
6 * PURPOSE: hibernate tab of applet
7 * PROGRAMMERS: Alexander Wurzinger (Lohnegrim at gmx dot net)
8 * Johannes Anderwald (johannes.anderwald@student.tugraz.at)
10 * Dmitry Chapyshev (lentind@yandex.ru)
14 //typedef long NTSTATUS;
19 BOOLEAN
Pos_InitData();
20 void Adv_InitDialog();
24 Hib_InitDialog(HWND hwndDlg
)
26 SYSTEM_POWER_CAPABILITIES PowerCaps
;
28 TCHAR szSize
[MAX_PATH
];
29 TCHAR szTemp
[MAX_PATH
];
30 ULARGE_INTEGER FreeBytesAvailable
, TotalNumberOfBytes
, TotalNumberOfFreeBytes
;
32 if (GetPwrCapabilities(&PowerCaps
))
34 CheckDlgButton(hwndDlg
,
36 PowerCaps
.HiberFilePresent
? BST_CHECKED
: BST_UNCHECKED
);
38 msex
.dwLength
= sizeof(msex
);
39 if (!GlobalMemoryStatusEx(&msex
))
44 if (GetWindowsDirectory(szTemp
,MAX_PATH
))
46 if (!GetDiskFreeSpaceEx(szTemp
,&FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
47 TotalNumberOfFreeBytes
.QuadPart
= 0;
51 if (!GetDiskFreeSpaceEx(NULL
,&FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
52 TotalNumberOfFreeBytes
.QuadPart
= 0;
55 if (TotalNumberOfFreeBytes
.QuadPart
> 0x100000)
57 if (LoadString(hApplet
, IDS_SIZEMB
, szTemp
, MAX_PATH
))
59 _stprintf(szSize
,szTemp
,TotalNumberOfFreeBytes
.QuadPart
/ 0x100000);
60 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szSize
);
65 if (LoadString(hApplet
, IDS_SIZEBYTS
, szTemp
, MAX_PATH
))
67 _stprintf(szSize
,szTemp
,TotalNumberOfFreeBytes
.QuadPart
);
68 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szSize
);
72 if (msex
.ullTotalPhys
>0x100000)
74 if (LoadString(hApplet
, IDS_SIZEMB
, szTemp
, MAX_PATH
))
76 _stprintf(szSize
,szTemp
,msex
.ullTotalPhys
/0x100000);
77 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
,szSize
);
82 if (LoadString(hApplet
, IDS_SIZEBYTS
, szTemp
, MAX_PATH
))
84 _stprintf(szSize
,szTemp
,msex
.ullTotalPhys
);
85 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
, szSize
);
89 if (TotalNumberOfFreeBytes
.QuadPart
< msex
.ullTotalPhys
&& !PowerCaps
.HiberFilePresent
)
91 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), FALSE
);
92 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), TRUE
);
96 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), FALSE
);
97 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), TRUE
);
103 Hib_SaveData(HWND hwndDlg
)
107 bHibernate
= (BOOLEAN
)(IsDlgButtonChecked(hwndDlg
, IDC_HIBERNATEFILE
) == BST_CHECKED
);
109 if (CallNtPowerInformation(SystemReserveHiberFile
,&bHibernate
, sizeof(bHibernate
), NULL
, 0) == STATUS_SUCCESS
)
113 Hib_InitDialog(hwndDlg
);
120 /* Property page dialog callback */
122 HibernateDlgProc(HWND hwndDlg
,
130 Hib_InitDialog(hwndDlg
);
133 switch(LOWORD(wParam
))
135 case IDC_HIBERNATEFILE
:
136 if (HIWORD(wParam
) == BN_CLICKED
)
138 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
144 LPNMHDR lpnm
= (LPNMHDR
)lParam
;
145 if (lpnm
->code
== (UINT
)PSN_APPLY
)
147 return Hib_SaveData(hwndDlg
);