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;
18 #define WIN32_NO_STATUS
29 void Hib_InitDialog(HWND
);
30 INT_PTR
Hib_SaveData(HWND
);
31 BOOLEAN
Pos_InitData();
32 void Adv_InitDialog();
34 /* Property page dialog callback */
46 Hib_InitDialog(hwndDlg
);
49 switch(LOWORD(wParam
))
51 case IDC_HIBERNATEFILE
:
52 if (HIWORD(wParam
) == BN_CLICKED
)
54 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
60 LPNMHDR lpnm
= (LPNMHDR
)lParam
;
61 if (lpnm
->code
== (UINT
)PSN_APPLY
)
63 return Hib_SaveData(hwndDlg
);
70 void Hib_InitDialog(HWND hwndDlg
)
72 SYSTEM_POWER_CAPABILITIES PowerCaps
;
74 TCHAR szSize
[MAX_PATH
];
75 TCHAR szTemp
[MAX_PATH
];
76 ULARGE_INTEGER FreeBytesAvailable
, TotalNumberOfBytes
, TotalNumberOfFreeBytes
;
78 if (GetPwrCapabilities(&PowerCaps
))
80 CheckDlgButton(hwndDlg
,
82 PowerCaps
.HiberFilePresent
? BST_CHECKED
: BST_UNCHECKED
);
84 msex
.dwLength
= sizeof(msex
);
85 if (!GlobalMemoryStatusEx(&msex
))
90 if (GetWindowsDirectory(szTemp
,MAX_PATH
))
92 if (!GetDiskFreeSpaceEx(szTemp
,&FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
93 TotalNumberOfFreeBytes
.QuadPart
= 0;
97 if (!GetDiskFreeSpaceEx(NULL
,&FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
98 TotalNumberOfFreeBytes
.QuadPart
= 0;
101 if (TotalNumberOfFreeBytes
.QuadPart
> 0x100000)
103 if (LoadString(hApplet
, IDS_SIZEMB
, szTemp
, MAX_PATH
))
105 _stprintf(szSize
,szTemp
,TotalNumberOfFreeBytes
.QuadPart
/ 0x100000);
106 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szSize
);
111 if (LoadString(hApplet
, IDS_SIZEBYTS
, szTemp
, MAX_PATH
))
113 _stprintf(szSize
,szTemp
,TotalNumberOfFreeBytes
.QuadPart
);
114 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szSize
);
118 if (msex
.ullTotalPhys
>0x100000)
120 if (LoadString(hApplet
, IDS_SIZEMB
, szTemp
, MAX_PATH
))
122 _stprintf(szSize
,szTemp
,msex
.ullTotalPhys
/0x100000);
123 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
,szSize
);
128 if (LoadString(hApplet
, IDS_SIZEBYTS
, szTemp
, MAX_PATH
))
130 _stprintf(szSize
,szTemp
,msex
.ullTotalPhys
);
131 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
, szSize
);
135 if (TotalNumberOfFreeBytes
.QuadPart
< msex
.ullTotalPhys
&& !PowerCaps
.HiberFilePresent
)
137 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), FALSE
);
138 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), TRUE
);
142 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), FALSE
);
143 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), TRUE
);
148 INT_PTR
Hib_SaveData(HWND hwndDlg
)
152 bHibernate
= (BOOLEAN
)(IsDlgButtonChecked(hwndDlg
, IDC_HIBERNATEFILE
) == BST_CHECKED
);
154 if (CallNtPowerInformation(SystemReserveHiberFile
,&bHibernate
, sizeof(bHibernate
), NULL
, 0) == STATUS_SUCCESS
)
158 Hib_InitDialog(hwndDlg
);