Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenhibernate.c
Go to the documentation of this file.
00001 /* $Id: hibernate.c 54535 2011-11-29 14:55:58Z dgorbachev $ 00002 * 00003 * PROJECT: ReactOS Power Configuration Applet 00004 * LICENSE: GPL - See COPYING in the top level directory 00005 * FILE: dll/cpl/powercfg/hibernate.c 00006 * PURPOSE: hibernate tab of applet 00007 * PROGRAMMERS: Alexander Wurzinger (Lohnegrim at gmx dot net) 00008 * Johannes Anderwald (johannes.anderwald@student.tugraz.at) 00009 * Martin Rottensteiner 00010 * Dmitry Chapyshev (lentind@yandex.ru) 00011 */ 00012 00013 //#ifndef NSTATUS 00014 //typedef long NTSTATUS; 00015 //#endif 00016 00017 #include "powercfg.h" 00018 00019 BOOLEAN Pos_InitData(); 00020 void Adv_InitDialog(); 00021 00022 00023 static VOID 00024 Hib_InitDialog(HWND hwndDlg) 00025 { 00026 SYSTEM_POWER_CAPABILITIES PowerCaps; 00027 MEMORYSTATUSEX msex; 00028 TCHAR szSize[MAX_PATH]; 00029 TCHAR szTemp[MAX_PATH]; 00030 ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes; 00031 00032 if (GetPwrCapabilities(&PowerCaps)) 00033 { 00034 CheckDlgButton(hwndDlg, 00035 IDC_HIBERNATEFILE, 00036 PowerCaps.HiberFilePresent ? BST_CHECKED : BST_UNCHECKED); 00037 00038 msex.dwLength = sizeof(msex); 00039 if (!GlobalMemoryStatusEx(&msex)) 00040 { 00041 return; // FIXME 00042 } 00043 00044 if (GetWindowsDirectory(szTemp,MAX_PATH)) 00045 { 00046 if (!GetDiskFreeSpaceEx(szTemp,&FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) 00047 TotalNumberOfFreeBytes.QuadPart = 0; 00048 } 00049 else 00050 { 00051 if (!GetDiskFreeSpaceEx(NULL,&FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) 00052 TotalNumberOfFreeBytes.QuadPart = 0; 00053 } 00054 00055 if (TotalNumberOfFreeBytes.QuadPart > 0x100000) 00056 { 00057 if (LoadString(hApplet, IDS_SIZEMB, szTemp, MAX_PATH)) 00058 { 00059 _stprintf(szSize,szTemp,TotalNumberOfFreeBytes.QuadPart / 0x100000); 00060 SetDlgItemText(hwndDlg, IDC_FREESPACE, szSize); 00061 } 00062 } 00063 else 00064 { 00065 if (LoadString(hApplet, IDS_SIZEBYTS, szTemp, MAX_PATH)) 00066 { 00067 _stprintf(szSize,szTemp,TotalNumberOfFreeBytes.QuadPart); 00068 SetDlgItemText(hwndDlg, IDC_FREESPACE, szSize); 00069 } 00070 } 00071 00072 if (msex.ullTotalPhys>0x100000) 00073 { 00074 if (LoadString(hApplet, IDS_SIZEMB, szTemp, MAX_PATH)) 00075 { 00076 _stprintf(szSize,szTemp,msex.ullTotalPhys/0x100000); 00077 SetDlgItemText(hwndDlg, IDC_SPACEFORHIBERNATEFILE,szSize); 00078 } 00079 } 00080 else 00081 { 00082 if (LoadString(hApplet, IDS_SIZEBYTS, szTemp, MAX_PATH)) 00083 { 00084 _stprintf(szSize,szTemp,msex.ullTotalPhys); 00085 SetDlgItemText(hwndDlg, IDC_SPACEFORHIBERNATEFILE, szSize); 00086 } 00087 } 00088 00089 if (TotalNumberOfFreeBytes.QuadPart < msex.ullTotalPhys && !PowerCaps.HiberFilePresent) 00090 { 00091 EnableWindow(GetDlgItem(hwndDlg, IDC_HIBERNATEFILE), FALSE); 00092 ShowWindow(GetDlgItem(hwndDlg, IDC_TOLESSFREESPACE), TRUE); 00093 } 00094 else 00095 { 00096 ShowWindow(GetDlgItem(hwndDlg, IDC_TOLESSFREESPACE), FALSE); 00097 EnableWindow(GetDlgItem(hwndDlg, IDC_HIBERNATEFILE), TRUE); 00098 } 00099 } 00100 } 00101 00102 INT_PTR 00103 Hib_SaveData(HWND hwndDlg) 00104 { 00105 BOOLEAN bHibernate; 00106 00107 bHibernate = (BOOLEAN)(IsDlgButtonChecked(hwndDlg, IDC_HIBERNATEFILE) == BST_CHECKED); 00108 00109 if (CallNtPowerInformation(SystemReserveHiberFile,&bHibernate, sizeof(bHibernate), NULL, 0) == STATUS_SUCCESS) 00110 { 00111 Pos_InitData(); 00112 Adv_InitDialog(); 00113 Hib_InitDialog(hwndDlg); 00114 return TRUE; 00115 } 00116 00117 return FALSE; 00118 } 00119 00120 /* Property page dialog callback */ 00121 INT_PTR CALLBACK 00122 HibernateDlgProc(HWND hwndDlg, 00123 UINT uMsg, 00124 WPARAM wParam, 00125 LPARAM lParam) 00126 { 00127 switch(uMsg) 00128 { 00129 case WM_INITDIALOG: 00130 Hib_InitDialog(hwndDlg); 00131 return TRUE; 00132 case WM_COMMAND: 00133 switch(LOWORD(wParam)) 00134 { 00135 case IDC_HIBERNATEFILE: 00136 if (HIWORD(wParam) == BN_CLICKED) 00137 { 00138 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00139 } 00140 } 00141 break; 00142 case WM_NOTIFY: 00143 { 00144 LPNMHDR lpnm = (LPNMHDR)lParam; 00145 if (lpnm->code == (UINT)PSN_APPLY) 00146 { 00147 return Hib_SaveData(hwndDlg); 00148 } 00149 } 00150 } 00151 return FALSE; 00152 } Generated on Fri May 25 2012 04:19:05 for ReactOS by
1.7.6.1
|