Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenaccess.c
Go to the documentation of this file.
00001 /* $Id: access.c 29112 2007-09-19 21:31:49Z ekohl $ 00002 * 00003 * PROJECT: ReactOS Accessibility Control Panel 00004 * LICENSE: GPL - See COPYING in the top level directory 00005 * FILE: dll/cpl/access/access.c 00006 * PURPOSE: Main control panel code 00007 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at) 00008 * Copyright 2007 Eric Kohl 00009 */ 00010 00011 #include "access.h" 00012 00013 #define NUM_APPLETS (1) 00014 00015 LONG CALLBACK SystemApplet(VOID); 00016 HINSTANCE hApplet = 0; 00017 HWND hCPLWindow; 00018 00019 /* Applets */ 00020 APPLET Applets[NUM_APPLETS] = 00021 { 00022 {IDI_CPLACCESS, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet} 00023 }; 00024 00025 00026 static BOOL 00027 ReadSettings(PGLOBAL_DATA pGlobalData) 00028 { 00029 DWORD dwDisposition; 00030 DWORD dwLength; 00031 HKEY hKey; 00032 LONG lError; 00033 00034 /* Get sticky keys information */ 00035 pGlobalData->stickyKeys.cbSize = sizeof(STICKYKEYS); 00036 if (!SystemParametersInfo(SPI_GETSTICKYKEYS, 00037 sizeof(STICKYKEYS), 00038 &pGlobalData->stickyKeys, 00039 0)) 00040 return FALSE; 00041 00042 /* Get filter keys information */ 00043 pGlobalData->filterKeys.cbSize = sizeof(FILTERKEYS); 00044 if (!SystemParametersInfo(SPI_GETFILTERKEYS, 00045 sizeof(FILTERKEYS), 00046 &pGlobalData->filterKeys, 00047 0)) 00048 return FALSE; 00049 00050 /* Get toggle keys information */ 00051 pGlobalData->toggleKeys.cbSize = sizeof(TOGGLEKEYS); 00052 if (!SystemParametersInfo(SPI_GETTOGGLEKEYS, 00053 sizeof(TOGGLEKEYS), 00054 &pGlobalData->toggleKeys, 00055 0)) 00056 return FALSE; 00057 00058 /* Get keyboard preference information */ 00059 if (!SystemParametersInfo(SPI_GETKEYBOARDPREF, 00060 0, 00061 &pGlobalData->bKeyboardPref, 00062 0)) 00063 return FALSE; 00064 00065 /* Get high contrast information */ 00066 pGlobalData->highContrast.cbSize = sizeof(HIGHCONTRAST); 00067 SystemParametersInfo(SPI_GETHIGHCONTRAST, 00068 sizeof(HIGHCONTRAST), 00069 &pGlobalData->highContrast, 00070 0); 00071 00072 SystemParametersInfo(SPI_GETCARETWIDTH, 00073 0, 00074 &pGlobalData->uCaretWidth, 00075 0); 00076 00077 pGlobalData->uCaretBlinkTime = GetCaretBlinkTime(); 00078 00079 /* Get sound settings */ 00080 pGlobalData->ssSoundSentry.cbSize = sizeof(SOUNDSENTRY); 00081 SystemParametersInfo(SPI_GETSOUNDSENTRY, 00082 sizeof(SOUNDSENTRY), 00083 &pGlobalData->ssSoundSentry, 00084 0); 00085 00086 SystemParametersInfo(SPI_GETSHOWSOUNDS, 00087 0, 00088 &pGlobalData->bShowSounds, 00089 0); 00090 00091 /* Get mouse keys information */ 00092 pGlobalData->mouseKeys.cbSize = sizeof(MOUSEKEYS); 00093 SystemParametersInfo(SPI_GETMOUSEKEYS, 00094 sizeof(MOUSEKEYS), 00095 &pGlobalData->mouseKeys, 00096 0); 00097 00098 /* Get access timeout information */ 00099 pGlobalData->accessTimeout.cbSize = sizeof(ACCESSTIMEOUT); 00100 SystemParametersInfo(SPI_GETACCESSTIMEOUT, 00101 sizeof(ACCESSTIMEOUT), 00102 &pGlobalData->accessTimeout, 00103 0); 00104 00105 /* Get serial keys information */ 00106 pGlobalData->serialKeys.cbSize = sizeof(SERIALKEYS); 00107 pGlobalData->serialKeys.lpszActivePort = pGlobalData->szActivePort; 00108 pGlobalData->serialKeys.lpszPort = pGlobalData->szPort; 00109 SystemParametersInfo(SPI_GETSERIALKEYS, 00110 sizeof(SERIALKEYS), 00111 &pGlobalData->serialKeys, 00112 0); 00113 00114 pGlobalData->bWarningSounds = TRUE; 00115 pGlobalData->bSoundOnActivation = TRUE; 00116 00117 lError = RegCreateKeyEx(HKEY_CURRENT_USER, 00118 _T("Control Panel\\Accessibility"), 00119 0, 00120 NULL, 00121 REG_OPTION_NON_VOLATILE, 00122 KEY_EXECUTE | KEY_QUERY_VALUE, 00123 NULL, 00124 &hKey, 00125 &dwDisposition); 00126 if (lError != ERROR_SUCCESS) 00127 return TRUE; 00128 00129 dwLength = sizeof(BOOL); 00130 lError = RegQueryValueEx(hKey, 00131 _T("Warning Sounds"), 00132 NULL, 00133 NULL, 00134 (LPBYTE)&pGlobalData->bWarningSounds, 00135 &dwLength); 00136 if (lError != ERROR_SUCCESS) 00137 pGlobalData->bWarningSounds = TRUE; 00138 00139 dwLength = sizeof(BOOL); 00140 lError = RegQueryValueEx(hKey, 00141 _T("Sound On Activation"), 00142 NULL, 00143 NULL, 00144 (LPBYTE)&pGlobalData->bSoundOnActivation, 00145 &dwLength); 00146 if (lError != ERROR_SUCCESS) 00147 pGlobalData->bSoundOnActivation = TRUE; 00148 00149 RegCloseKey(hKey); 00150 00151 return TRUE; 00152 } 00153 00154 00155 static VOID 00156 InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, PGLOBAL_DATA pGlobalData) 00157 { 00158 ZeroMemory(psp, sizeof(PROPSHEETPAGE)); 00159 psp->dwSize = sizeof(PROPSHEETPAGE); 00160 psp->dwFlags = PSP_DEFAULT; 00161 psp->hInstance = hApplet; 00162 psp->pszTemplate = MAKEINTRESOURCE(idDlg); 00163 psp->pfnDlgProc = DlgProc; 00164 psp->lParam = (LPARAM)pGlobalData; 00165 } 00166 00167 00168 /* First Applet */ 00169 00170 LONG CALLBACK 00171 SystemApplet(VOID) 00172 { 00173 PGLOBAL_DATA pGlobalData; 00174 PROPSHEETPAGE psp[5]; 00175 PROPSHEETHEADER psh; 00176 TCHAR Caption[1024]; 00177 INT ret; 00178 00179 LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption) / sizeof(TCHAR)); 00180 00181 pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA)); 00182 if (pGlobalData == NULL) 00183 return 0; 00184 00185 if (!ReadSettings(pGlobalData)) 00186 return 0; 00187 00188 ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); 00189 psh.dwSize = sizeof(PROPSHEETHEADER); 00190 psh.dwFlags = PSH_PROPSHEETPAGE; 00191 psh.hwndParent = hCPLWindow; 00192 psh.hInstance = hApplet; 00193 psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLACCESS)); 00194 psh.pszCaption = Caption; 00195 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); 00196 psh.nStartPage = 0; 00197 psh.ppsp = psp; 00198 00199 InitPropSheetPage(&psp[0], IDD_PROPPAGEKEYBOARD, (DLGPROC)KeyboardPageProc, pGlobalData); 00200 InitPropSheetPage(&psp[1], IDD_PROPPAGESOUND, (DLGPROC)SoundPageProc, pGlobalData); 00201 InitPropSheetPage(&psp[2], IDD_PROPPAGEDISPLAY, (DLGPROC)DisplayPageProc, pGlobalData); 00202 InitPropSheetPage(&psp[3], IDD_PROPPAGEMOUSE, (DLGPROC)MousePageProc, pGlobalData); 00203 InitPropSheetPage(&psp[4], IDD_PROPPAGEGENERAL, (DLGPROC)GeneralPageProc, pGlobalData); 00204 00205 ret = PropertySheet(&psh); 00206 00207 HeapFree(GetProcessHeap(), 0, pGlobalData); 00208 00209 return (LONG)(ret != -1); 00210 } 00211 00212 /* Control Panel Callback */ 00213 LONG CALLBACK 00214 CPlApplet(HWND hwndCPl, 00215 UINT uMsg, 00216 LPARAM lParam1, 00217 LPARAM lParam2) 00218 { 00219 INT i = (INT)lParam1; 00220 00221 switch (uMsg) 00222 { 00223 case CPL_INIT: 00224 return TRUE; 00225 00226 case CPL_GETCOUNT: 00227 return NUM_APPLETS; 00228 00229 case CPL_INQUIRE: 00230 { 00231 CPLINFO *CPlInfo = (CPLINFO*)lParam2; 00232 CPlInfo->lData = 0; 00233 CPlInfo->idIcon = Applets[i].idIcon; 00234 CPlInfo->idName = Applets[i].idName; 00235 CPlInfo->idInfo = Applets[i].idDescription; 00236 } 00237 break; 00238 00239 case CPL_DBLCLK: 00240 hCPLWindow = hwndCPl; 00241 Applets[i].AppletProc(); 00242 break; 00243 } 00244 00245 return FALSE; 00246 } 00247 00248 00249 BOOL WINAPI 00250 DllMain(HINSTANCE hinstDLL, 00251 DWORD dwReason, 00252 LPVOID lpvReserved) 00253 { 00254 UNREFERENCED_PARAMETER(lpvReserved); 00255 00256 switch (dwReason) 00257 { 00258 case DLL_PROCESS_ATTACH: 00259 case DLL_THREAD_ATTACH: 00260 hApplet = hinstDLL; 00261 break; 00262 } 00263 00264 return TRUE; 00265 } 00266 Generated on Sat May 26 2012 04:19:39 for ReactOS by
1.7.6.1
|