1 /* $Id: access.c 29112 2007-09-19 21:31:49Z ekohl $
3 * PROJECT: ReactOS Accessibility Control Panel
4 * LICENSE: GPL - See COPYING in the top level directory
5 * FILE: dll/cpl/access/access.c
6 * PURPOSE: Main control panel code
7 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
8 * Copyright 2007 Eric Kohl
19 #define NUM_APPLETS (1)
21 LONG CALLBACK
SystemApplet(VOID
);
22 HINSTANCE hApplet
= 0;
26 APPLET Applets
[NUM_APPLETS
] =
28 {IDI_CPLACCESS
, IDS_CPLSYSTEMNAME
, IDS_CPLSYSTEMDESCRIPTION
, SystemApplet
}
33 ReadSettings(PGLOBAL_DATA pGlobalData
)
40 /* Get sticky keys information */
41 pGlobalData
->stickyKeys
.cbSize
= sizeof(STICKYKEYS
);
42 if (!SystemParametersInfo(SPI_GETSTICKYKEYS
,
44 &pGlobalData
->stickyKeys
,
48 /* Get filter keys information */
49 pGlobalData
->filterKeys
.cbSize
= sizeof(FILTERKEYS
);
50 if (!SystemParametersInfo(SPI_GETFILTERKEYS
,
52 &pGlobalData
->filterKeys
,
56 /* Get toggle keys information */
57 pGlobalData
->toggleKeys
.cbSize
= sizeof(TOGGLEKEYS
);
58 if (!SystemParametersInfo(SPI_GETTOGGLEKEYS
,
60 &pGlobalData
->toggleKeys
,
64 /* Get keyboard preference information */
65 if (!SystemParametersInfo(SPI_GETKEYBOARDPREF
,
67 &pGlobalData
->bKeyboardPref
,
71 /* Get high contrast information */
72 pGlobalData
->highContrast
.cbSize
= sizeof(HIGHCONTRAST
);
73 SystemParametersInfo(SPI_GETHIGHCONTRAST
,
75 &pGlobalData
->highContrast
,
78 SystemParametersInfo(SPI_GETCARETWIDTH
,
80 &pGlobalData
->uCaretWidth
,
83 pGlobalData
->uCaretBlinkTime
= GetCaretBlinkTime();
85 /* get sound settings */
86 pGlobalData
->ssSoundSentry
.cbSize
= sizeof(SOUNDSENTRY
);
87 SystemParametersInfo(SPI_GETSOUNDSENTRY
,
89 &pGlobalData
->ssSoundSentry
,
92 SystemParametersInfo(SPI_GETSHOWSOUNDS
,
94 &pGlobalData
->bShowSounds
,
97 /* Get mouse keys information */
98 pGlobalData
->mouseKeys
.cbSize
= sizeof(MOUSEKEYS
);
99 SystemParametersInfo(SPI_GETMOUSEKEYS
,
101 &pGlobalData
->mouseKeys
,
104 /* Get access timeout information */
105 pGlobalData
->accessTimeout
.cbSize
= sizeof(ACCESSTIMEOUT
);
106 SystemParametersInfo(SPI_GETACCESSTIMEOUT
,
107 sizeof(ACCESSTIMEOUT
),
108 &pGlobalData
->accessTimeout
,
111 /* Get serial keys information */
112 pGlobalData
->serialKeys
.cbSize
= sizeof(SERIALKEYS
);
113 pGlobalData
->serialKeys
.lpszActivePort
= pGlobalData
->szActivePort
;
114 pGlobalData
->serialKeys
.lpszPort
= pGlobalData
->szPort
;
115 SystemParametersInfo(SPI_GETSERIALKEYS
,
117 &pGlobalData
->serialKeys
,
120 pGlobalData
->bWarningSounds
= TRUE
;
121 pGlobalData
->bSoundOnActivation
= TRUE
;
123 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
124 _T("Control Panel\\Accessibility"),
127 REG_OPTION_NON_VOLATILE
,
128 KEY_EXECUTE
| KEY_QUERY_VALUE
,
132 if (lError
!= ERROR_SUCCESS
)
135 dwLength
= sizeof(BOOL
);
136 lError
= RegQueryValueEx(hKey
,
137 _T("Warning Sounds"),
140 (LPBYTE
)&pGlobalData
->bWarningSounds
,
142 if (lError
!= ERROR_SUCCESS
)
143 pGlobalData
->bWarningSounds
= TRUE
;
145 dwLength
= sizeof(BOOL
);
146 lError
= RegQueryValueEx(hKey
,
147 _T("Sound On Activation"),
150 (LPBYTE
)&pGlobalData
->bSoundOnActivation
,
152 if (lError
!= ERROR_SUCCESS
)
153 pGlobalData
->bSoundOnActivation
= TRUE
;
162 InitPropSheetPage(PROPSHEETPAGE
*psp
, WORD idDlg
, DLGPROC DlgProc
, PGLOBAL_DATA pGlobalData
)
164 ZeroMemory(psp
, sizeof(PROPSHEETPAGE
));
165 psp
->dwSize
= sizeof(PROPSHEETPAGE
);
166 psp
->dwFlags
= PSP_DEFAULT
;
167 psp
->hInstance
= hApplet
;
168 psp
->pszTemplate
= MAKEINTRESOURCE(idDlg
);
169 psp
->pfnDlgProc
= DlgProc
;
170 psp
->lParam
= (LPARAM
)pGlobalData
;
179 PGLOBAL_DATA pGlobalData
;
180 PROPSHEETPAGE psp
[5];
185 LoadString(hApplet
, IDS_CPLSYSTEMNAME
, Caption
, sizeof(Caption
) / sizeof(TCHAR
));
187 pGlobalData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(GLOBAL_DATA
));
188 if (pGlobalData
== NULL
)
191 if (!ReadSettings(pGlobalData
))
194 ZeroMemory(&psh
, sizeof(PROPSHEETHEADER
));
195 psh
.dwSize
= sizeof(PROPSHEETHEADER
);
196 psh
.dwFlags
= PSH_PROPSHEETPAGE
;
197 psh
.hwndParent
= hCPLWindow
;
198 psh
.hInstance
= hApplet
;
199 psh
.hIcon
= LoadIcon(hApplet
, MAKEINTRESOURCE(IDI_CPLACCESS
));
200 psh
.pszCaption
= Caption
;
201 psh
.nPages
= sizeof(psp
) / sizeof(PROPSHEETPAGE
);
205 InitPropSheetPage(&psp
[0], IDD_PROPPAGEKEYBOARD
, (DLGPROC
)KeyboardPageProc
, pGlobalData
);
206 InitPropSheetPage(&psp
[1], IDD_PROPPAGESOUND
, (DLGPROC
)SoundPageProc
, pGlobalData
);
207 InitPropSheetPage(&psp
[2], IDD_PROPPAGEDISPLAY
, (DLGPROC
)DisplayPageProc
, pGlobalData
);
208 InitPropSheetPage(&psp
[3], IDD_PROPPAGEMOUSE
, (DLGPROC
)MousePageProc
, pGlobalData
);
209 InitPropSheetPage(&psp
[4], IDD_PROPPAGEGENERAL
, (DLGPROC
)GeneralPageProc
, pGlobalData
);
211 ret
= PropertySheet(&psh
);
213 HeapFree(GetProcessHeap(), 0, pGlobalData
);
215 return (LONG
)(ret
!= -1);
218 /* Control Panel Callback */
220 CPlApplet(HWND hwndCPl
,
225 INT i
= (INT
)lParam1
;
237 CPLINFO
*CPlInfo
= (CPLINFO
*)lParam2
;
239 CPlInfo
->idIcon
= Applets
[i
].idIcon
;
240 CPlInfo
->idName
= Applets
[i
].idName
;
241 CPlInfo
->idInfo
= Applets
[i
].idDescription
;
246 hCPLWindow
= hwndCPl
;
247 Applets
[i
].AppletProc();
256 DllMain(HINSTANCE hinstDLL
,
260 UNREFERENCED_PARAMETER(lpvReserved
);
264 case DLL_PROCESS_ATTACH
:
265 case DLL_THREAD_ATTACH
: