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
13 #define NUM_APPLETS (1)
15 LONG CALLBACK
SystemApplet(VOID
);
16 HINSTANCE hApplet
= 0;
20 APPLET Applets
[NUM_APPLETS
] =
22 {IDI_CPLACCESS
, IDS_CPLSYSTEMNAME
, IDS_CPLSYSTEMDESCRIPTION
, SystemApplet
}
27 ReadSettings(PGLOBAL_DATA pGlobalData
)
34 /* Get sticky keys information */
35 pGlobalData
->stickyKeys
.cbSize
= sizeof(STICKYKEYS
);
36 if (!SystemParametersInfo(SPI_GETSTICKYKEYS
,
38 &pGlobalData
->stickyKeys
,
42 /* Get filter keys information */
43 pGlobalData
->filterKeys
.cbSize
= sizeof(FILTERKEYS
);
44 if (!SystemParametersInfo(SPI_GETFILTERKEYS
,
46 &pGlobalData
->filterKeys
,
50 /* Get toggle keys information */
51 pGlobalData
->toggleKeys
.cbSize
= sizeof(TOGGLEKEYS
);
52 if (!SystemParametersInfo(SPI_GETTOGGLEKEYS
,
54 &pGlobalData
->toggleKeys
,
58 /* Get keyboard preference information */
59 if (!SystemParametersInfo(SPI_GETKEYBOARDPREF
,
61 &pGlobalData
->bKeyboardPref
,
65 /* Get high contrast information */
66 pGlobalData
->highContrast
.cbSize
= sizeof(HIGHCONTRAST
);
67 SystemParametersInfo(SPI_GETHIGHCONTRAST
,
69 &pGlobalData
->highContrast
,
72 SystemParametersInfo(SPI_GETCARETWIDTH
,
74 &pGlobalData
->uCaretWidth
,
77 pGlobalData
->uCaretBlinkTime
= GetCaretBlinkTime();
79 /* Get sound settings */
80 pGlobalData
->ssSoundSentry
.cbSize
= sizeof(SOUNDSENTRY
);
81 SystemParametersInfo(SPI_GETSOUNDSENTRY
,
83 &pGlobalData
->ssSoundSentry
,
86 SystemParametersInfo(SPI_GETSHOWSOUNDS
,
88 &pGlobalData
->bShowSounds
,
91 /* Get mouse keys information */
92 pGlobalData
->mouseKeys
.cbSize
= sizeof(MOUSEKEYS
);
93 SystemParametersInfo(SPI_GETMOUSEKEYS
,
95 &pGlobalData
->mouseKeys
,
98 /* Get access timeout information */
99 pGlobalData
->accessTimeout
.cbSize
= sizeof(ACCESSTIMEOUT
);
100 SystemParametersInfo(SPI_GETACCESSTIMEOUT
,
101 sizeof(ACCESSTIMEOUT
),
102 &pGlobalData
->accessTimeout
,
105 /* Get serial keys information */
106 pGlobalData
->serialKeys
.cbSize
= sizeof(SERIALKEYS
);
107 pGlobalData
->serialKeys
.lpszActivePort
= pGlobalData
->szActivePort
;
108 pGlobalData
->serialKeys
.lpszPort
= pGlobalData
->szPort
;
109 SystemParametersInfo(SPI_GETSERIALKEYS
,
111 &pGlobalData
->serialKeys
,
114 pGlobalData
->bWarningSounds
= TRUE
;
115 pGlobalData
->bSoundOnActivation
= TRUE
;
117 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
118 _T("Control Panel\\Accessibility"),
121 REG_OPTION_NON_VOLATILE
,
122 KEY_EXECUTE
| KEY_QUERY_VALUE
,
126 if (lError
!= ERROR_SUCCESS
)
129 dwLength
= sizeof(BOOL
);
130 lError
= RegQueryValueEx(hKey
,
131 _T("Warning Sounds"),
134 (LPBYTE
)&pGlobalData
->bWarningSounds
,
136 if (lError
!= ERROR_SUCCESS
)
137 pGlobalData
->bWarningSounds
= TRUE
;
139 dwLength
= sizeof(BOOL
);
140 lError
= RegQueryValueEx(hKey
,
141 _T("Sound On Activation"),
144 (LPBYTE
)&pGlobalData
->bSoundOnActivation
,
146 if (lError
!= ERROR_SUCCESS
)
147 pGlobalData
->bSoundOnActivation
= TRUE
;
156 InitPropSheetPage(PROPSHEETPAGE
*psp
, WORD idDlg
, DLGPROC DlgProc
, PGLOBAL_DATA pGlobalData
)
158 ZeroMemory(psp
, sizeof(PROPSHEETPAGE
));
159 psp
->dwSize
= sizeof(PROPSHEETPAGE
);
160 psp
->dwFlags
= PSP_DEFAULT
;
161 psp
->hInstance
= hApplet
;
162 psp
->pszTemplate
= MAKEINTRESOURCE(idDlg
);
163 psp
->pfnDlgProc
= DlgProc
;
164 psp
->lParam
= (LPARAM
)pGlobalData
;
173 PGLOBAL_DATA pGlobalData
;
174 PROPSHEETPAGE psp
[5];
179 LoadString(hApplet
, IDS_CPLSYSTEMNAME
, Caption
, sizeof(Caption
) / sizeof(TCHAR
));
181 pGlobalData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(GLOBAL_DATA
));
182 if (pGlobalData
== NULL
)
185 if (!ReadSettings(pGlobalData
))
188 ZeroMemory(&psh
, sizeof(PROPSHEETHEADER
));
189 psh
.dwSize
= sizeof(PROPSHEETHEADER
);
190 psh
.dwFlags
= PSH_PROPSHEETPAGE
;
191 psh
.hwndParent
= hCPLWindow
;
192 psh
.hInstance
= hApplet
;
193 psh
.hIcon
= LoadIcon(hApplet
, MAKEINTRESOURCE(IDI_CPLACCESS
));
194 psh
.pszCaption
= Caption
;
195 psh
.nPages
= sizeof(psp
) / sizeof(PROPSHEETPAGE
);
199 InitPropSheetPage(&psp
[0], IDD_PROPPAGEKEYBOARD
, (DLGPROC
)KeyboardPageProc
, pGlobalData
);
200 InitPropSheetPage(&psp
[1], IDD_PROPPAGESOUND
, (DLGPROC
)SoundPageProc
, pGlobalData
);
201 InitPropSheetPage(&psp
[2], IDD_PROPPAGEDISPLAY
, (DLGPROC
)DisplayPageProc
, pGlobalData
);
202 InitPropSheetPage(&psp
[3], IDD_PROPPAGEMOUSE
, (DLGPROC
)MousePageProc
, pGlobalData
);
203 InitPropSheetPage(&psp
[4], IDD_PROPPAGEGENERAL
, (DLGPROC
)GeneralPageProc
, pGlobalData
);
205 ret
= PropertySheet(&psh
);
207 HeapFree(GetProcessHeap(), 0, pGlobalData
);
209 return (LONG
)(ret
!= -1);
212 /* Control Panel Callback */
214 CPlApplet(HWND hwndCPl
,
219 INT i
= (INT
)lParam1
;
231 CPLINFO
*CPlInfo
= (CPLINFO
*)lParam2
;
233 CPlInfo
->idIcon
= Applets
[i
].idIcon
;
234 CPlInfo
->idName
= Applets
[i
].idName
;
235 CPlInfo
->idInfo
= Applets
[i
].idDescription
;
240 hCPLWindow
= hwndCPl
;
241 Applets
[i
].AppletProc();
250 DllMain(HINSTANCE hinstDLL
,
254 UNREFERENCED_PARAMETER(lpvReserved
);
258 case DLL_PROCESS_ATTACH
:
259 case DLL_THREAD_ATTACH
: