2 * PROJECT: ReactOS Accessibility Control Panel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/access/access.c
5 * PURPOSE: Main control panel code
6 * COPYRIGHT: Copyright 2004 Johannes Anderwald (johannes.anderwald@reactos.org)
7 * Copyright 2007 Eric Kohl
14 #define NUM_APPLETS (1)
16 LONG CALLBACK
SystemApplet(VOID
);
17 HINSTANCE hApplet
= 0;
21 APPLET Applets
[NUM_APPLETS
] =
23 {IDI_CPLACCESS
, IDS_CPLSYSTEMNAME
, IDS_CPLSYSTEMDESCRIPTION
, SystemApplet
}
28 ReadSettings(PGLOBAL_DATA pGlobalData
)
35 /* Get sticky keys information */
36 pGlobalData
->stickyKeys
.cbSize
= sizeof(STICKYKEYS
);
37 if (!SystemParametersInfo(SPI_GETSTICKYKEYS
,
39 &pGlobalData
->stickyKeys
,
43 /* Get filter keys information */
44 pGlobalData
->filterKeys
.cbSize
= sizeof(FILTERKEYS
);
45 if (!SystemParametersInfo(SPI_GETFILTERKEYS
,
47 &pGlobalData
->filterKeys
,
51 /* Get toggle keys information */
52 pGlobalData
->toggleKeys
.cbSize
= sizeof(TOGGLEKEYS
);
53 if (!SystemParametersInfo(SPI_GETTOGGLEKEYS
,
55 &pGlobalData
->toggleKeys
,
59 /* Get keyboard preference information */
60 if (!SystemParametersInfo(SPI_GETKEYBOARDPREF
,
62 &pGlobalData
->bKeyboardPref
,
66 /* Get high contrast information */
67 pGlobalData
->highContrast
.cbSize
= sizeof(HIGHCONTRAST
);
68 SystemParametersInfo(SPI_GETHIGHCONTRAST
,
70 &pGlobalData
->highContrast
,
73 SystemParametersInfo(SPI_GETCARETWIDTH
,
75 &pGlobalData
->uCaretWidth
,
78 pGlobalData
->uCaretBlinkTime
= GetCaretBlinkTime();
80 /* Get sound settings */
81 pGlobalData
->ssSoundSentry
.cbSize
= sizeof(SOUNDSENTRY
);
82 SystemParametersInfo(SPI_GETSOUNDSENTRY
,
84 &pGlobalData
->ssSoundSentry
,
87 SystemParametersInfo(SPI_GETSHOWSOUNDS
,
89 &pGlobalData
->bShowSounds
,
92 /* Get mouse keys information */
93 pGlobalData
->mouseKeys
.cbSize
= sizeof(MOUSEKEYS
);
94 SystemParametersInfo(SPI_GETMOUSEKEYS
,
96 &pGlobalData
->mouseKeys
,
99 /* Get access timeout information */
100 pGlobalData
->accessTimeout
.cbSize
= sizeof(ACCESSTIMEOUT
);
101 SystemParametersInfo(SPI_GETACCESSTIMEOUT
,
102 sizeof(ACCESSTIMEOUT
),
103 &pGlobalData
->accessTimeout
,
106 /* Get serial keys information */
107 pGlobalData
->serialKeys
.cbSize
= sizeof(SERIALKEYS
);
108 pGlobalData
->serialKeys
.lpszActivePort
= pGlobalData
->szActivePort
;
109 pGlobalData
->serialKeys
.lpszPort
= pGlobalData
->szPort
;
110 SystemParametersInfo(SPI_GETSERIALKEYS
,
112 &pGlobalData
->serialKeys
,
115 pGlobalData
->bWarningSounds
= TRUE
;
116 pGlobalData
->bSoundOnActivation
= TRUE
;
118 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
119 _T("Control Panel\\Accessibility"),
122 REG_OPTION_NON_VOLATILE
,
123 KEY_EXECUTE
| KEY_QUERY_VALUE
,
127 if (lError
!= ERROR_SUCCESS
)
130 dwLength
= sizeof(BOOL
);
131 lError
= RegQueryValueEx(hKey
,
132 _T("Warning Sounds"),
135 (LPBYTE
)&pGlobalData
->bWarningSounds
,
137 if (lError
!= ERROR_SUCCESS
)
138 pGlobalData
->bWarningSounds
= TRUE
;
140 dwLength
= sizeof(BOOL
);
141 lError
= RegQueryValueEx(hKey
,
142 _T("Sound On Activation"),
145 (LPBYTE
)&pGlobalData
->bSoundOnActivation
,
147 if (lError
!= ERROR_SUCCESS
)
148 pGlobalData
->bSoundOnActivation
= TRUE
;
157 InitPropSheetPage(PROPSHEETPAGE
*psp
, WORD idDlg
, DLGPROC DlgProc
, PGLOBAL_DATA pGlobalData
)
159 ZeroMemory(psp
, sizeof(PROPSHEETPAGE
));
160 psp
->dwSize
= sizeof(PROPSHEETPAGE
);
161 psp
->dwFlags
= PSP_DEFAULT
;
162 psp
->hInstance
= hApplet
;
163 psp
->pszTemplate
= MAKEINTRESOURCE(idDlg
);
164 psp
->pfnDlgProc
= DlgProc
;
165 psp
->lParam
= (LPARAM
)pGlobalData
;
174 PGLOBAL_DATA pGlobalData
;
175 PROPSHEETPAGE psp
[5];
180 LoadString(hApplet
, IDS_CPLSYSTEMNAME
, Caption
, sizeof(Caption
) / sizeof(TCHAR
));
182 pGlobalData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(GLOBAL_DATA
));
183 if (pGlobalData
== NULL
)
186 if (!ReadSettings(pGlobalData
))
188 HeapFree(GetProcessHeap(), 0, pGlobalData
);
192 ZeroMemory(&psh
, sizeof(PROPSHEETHEADER
));
193 psh
.dwSize
= sizeof(PROPSHEETHEADER
);
194 psh
.dwFlags
= PSH_PROPSHEETPAGE
;
195 psh
.hwndParent
= hCPLWindow
;
196 psh
.hInstance
= hApplet
;
197 psh
.hIcon
= LoadIcon(hApplet
, MAKEINTRESOURCE(IDI_CPLACCESS
));
198 psh
.pszCaption
= Caption
;
199 psh
.nPages
= sizeof(psp
) / sizeof(PROPSHEETPAGE
);
203 InitPropSheetPage(&psp
[0], IDD_PROPPAGEKEYBOARD
, (DLGPROC
)KeyboardPageProc
, pGlobalData
);
204 InitPropSheetPage(&psp
[1], IDD_PROPPAGESOUND
, (DLGPROC
)SoundPageProc
, pGlobalData
);
205 InitPropSheetPage(&psp
[2], IDD_PROPPAGEDISPLAY
, (DLGPROC
)DisplayPageProc
, pGlobalData
);
206 InitPropSheetPage(&psp
[3], IDD_PROPPAGEMOUSE
, (DLGPROC
)MousePageProc
, pGlobalData
);
207 InitPropSheetPage(&psp
[4], IDD_PROPPAGEGENERAL
, (DLGPROC
)GeneralPageProc
, pGlobalData
);
209 ret
= PropertySheet(&psh
);
211 HeapFree(GetProcessHeap(), 0, pGlobalData
);
213 return (LONG
)(ret
!= -1);
216 /* Control Panel Callback */
218 CPlApplet(HWND hwndCPl
,
223 INT i
= (INT
)lParam1
;
235 CPLINFO
*CPlInfo
= (CPLINFO
*)lParam2
;
237 CPlInfo
->idIcon
= Applets
[i
].idIcon
;
238 CPlInfo
->idName
= Applets
[i
].idName
;
239 CPlInfo
->idInfo
= Applets
[i
].idDescription
;
244 hCPLWindow
= hwndCPl
;
245 Applets
[i
].AppletProc();
254 DllMain(HINSTANCE hinstDLL
,
258 UNREFERENCED_PARAMETER(lpvReserved
);
262 case DLL_PROCESS_ATTACH
:
263 case DLL_THREAD_ATTACH
: