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
;
169 PropSheetProc(HWND hwndDlg
, UINT uMsg
, LPARAM lParam
)
171 // NOTE: This callback is needed to set large icon correctly.
175 case PSCB_INITIALIZED
:
177 hIcon
= LoadIconW(hApplet
, MAKEINTRESOURCEW(IDI_CPLACCESS
));
178 SendMessageW(hwndDlg
, WM_SETICON
, ICON_BIG
, (LPARAM
)hIcon
);
190 PGLOBAL_DATA pGlobalData
;
191 PROPSHEETPAGE psp
[5];
196 LoadString(hApplet
, IDS_CPLSYSTEMNAME
, Caption
, sizeof(Caption
) / sizeof(TCHAR
));
198 pGlobalData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(GLOBAL_DATA
));
199 if (pGlobalData
== NULL
)
202 if (!ReadSettings(pGlobalData
))
204 HeapFree(GetProcessHeap(), 0, pGlobalData
);
208 ZeroMemory(&psh
, sizeof(PROPSHEETHEADER
));
209 psh
.dwSize
= sizeof(PROPSHEETHEADER
);
210 psh
.dwFlags
= PSH_PROPSHEETPAGE
| PSH_USEICONID
| PSH_USECALLBACK
;
211 psh
.hwndParent
= hCPLWindow
;
212 psh
.hInstance
= hApplet
;
213 psh
.pszIcon
= MAKEINTRESOURCEW(IDI_CPLACCESS
);
214 psh
.pszCaption
= Caption
;
215 psh
.nPages
= sizeof(psp
) / sizeof(PROPSHEETPAGE
);
218 psh
.pfnCallback
= PropSheetProc
;
220 InitPropSheetPage(&psp
[0], IDD_PROPPAGEKEYBOARD
, KeyboardPageProc
, pGlobalData
);
221 InitPropSheetPage(&psp
[1], IDD_PROPPAGESOUND
, SoundPageProc
, pGlobalData
);
222 InitPropSheetPage(&psp
[2], IDD_PROPPAGEDISPLAY
, DisplayPageProc
, pGlobalData
);
223 InitPropSheetPage(&psp
[3], IDD_PROPPAGEMOUSE
, MousePageProc
, pGlobalData
);
224 InitPropSheetPage(&psp
[4], IDD_PROPPAGEGENERAL
, GeneralPageProc
, pGlobalData
);
226 ret
= PropertySheet(&psh
);
228 HeapFree(GetProcessHeap(), 0, pGlobalData
);
230 return (LONG
)(ret
!= -1);
233 /* Control Panel Callback */
235 CPlApplet(HWND hwndCPl
,
240 INT i
= (INT
)lParam1
;
252 CPLINFO
*CPlInfo
= (CPLINFO
*)lParam2
;
254 CPlInfo
->idIcon
= Applets
[i
].idIcon
;
255 CPlInfo
->idName
= Applets
[i
].idName
;
256 CPlInfo
->idInfo
= Applets
[i
].idDescription
;
261 hCPLWindow
= hwndCPl
;
262 Applets
[i
].AppletProc();
271 DllMain(HINSTANCE hinstDLL
,
275 UNREFERENCED_PARAMETER(lpvReserved
);
279 case DLL_PROCESS_ATTACH
:
280 case DLL_THREAD_ATTACH
: