3 * FILE: dll/cpl/input/key_settings_dialog.c
5 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
10 static KEY_SETTINGS _KeySettings
= { 0 };
16 DWORD dwAttributes
= 0;
19 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
23 &hKey
) == ERROR_SUCCESS
)
25 DWORD dwSize
= sizeof(dwAttributes
);
27 RegQueryValueExW(hKey
,
30 (LPBYTE
)&dwAttributes
,
40 ReadKeysSettings(VOID
)
44 _KeySettings
.dwAttributes
= ReadAttributes();
46 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
47 L
"Keyboard Layout\\Toggle",
50 &hKey
) == ERROR_SUCCESS
)
52 WCHAR szBuffer
[MAX_PATH
];
55 dwSize
= sizeof(szBuffer
);
57 if (RegQueryValueExW(hKey
,
60 (LPBYTE
)szBuffer
, &dwSize
) == ERROR_SUCCESS
)
62 _KeySettings
.dwLanguage
= _wtoi(szBuffer
);
65 dwSize
= sizeof(szBuffer
);
67 if (RegQueryValueExW(hKey
,
70 (LPBYTE
)szBuffer
, &dwSize
) == ERROR_SUCCESS
)
72 _KeySettings
.dwLayout
= _wtoi(szBuffer
);
81 WriteKeysSettings(VOID
)
85 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
89 &hKey
) == ERROR_SUCCESS
)
95 (LPBYTE
)&_KeySettings
.dwAttributes
,
101 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
102 L
"Keyboard Layout\\Toggle",
105 &hKey
) == ERROR_SUCCESS
)
107 WCHAR szBuffer
[MAX_PATH
];
109 StringCchPrintfW(szBuffer
, ARRAYSIZE(szBuffer
), L
"%lu", _KeySettings
.dwLanguage
);
116 (wcslen(szBuffer
) + 1) * sizeof(WCHAR
));
123 (wcslen(szBuffer
) + 1) * sizeof(WCHAR
));
125 StringCchPrintfW(szBuffer
, ARRAYSIZE(szBuffer
), L
"%lu", _KeySettings
.dwLayout
);
132 (wcslen(szBuffer
) + 1) * sizeof(WCHAR
));
137 /* Notice system of change hotkeys parameters */
138 SystemParametersInfoW(SPI_SETLANGTOGGLE
, 0, NULL
, 0);
140 /* Notice system of change CapsLock mode parameters */
141 ActivateKeyboardLayout(GetKeyboardLayout(0), KLF_RESET
| _KeySettings
.dwAttributes
);
146 UpdateKeySettingsListView(HWND hwndList
)
148 WCHAR szBuffer
[MAX_STR_LEN
];
152 ListView_DeleteAllItems(hwndList
);
154 ZeroMemory(&item
, sizeof(item
));
156 LoadStringW(hApplet
, IDS_SWITCH_BET_INLANG
, szBuffer
, ARRAYSIZE(szBuffer
));
157 item
.mask
= LVIF_TEXT
| LVIF_PARAM
| LVIF_STATE
;
158 item
.pszText
= szBuffer
;
161 iItemIndex
= ListView_InsertItem(hwndList
, &item
);
163 if (_KeySettings
.dwLanguage
== 1)
165 LoadStringW(hApplet
, IDS_LEFT_ALT_SHIFT
, szBuffer
, ARRAYSIZE(szBuffer
));
167 else if (_KeySettings
.dwLanguage
== 2)
169 LoadStringW(hApplet
, IDS_CTRL_SHIFT
, szBuffer
, ARRAYSIZE(szBuffer
));
173 LoadStringW(hApplet
, IDS_NONE
, szBuffer
, ARRAYSIZE(szBuffer
));
176 ListView_SetItemText(hwndList
, iItemIndex
, 1, szBuffer
);
181 OnInitKeySettingsDialog(HWND hwndDlg
)
188 if (_KeySettings
.dwAttributes
& KLF_SHIFTLOCK
)
190 CheckDlgButton(hwndDlg
, IDC_PRESS_SHIFT_KEY_RB
, BST_CHECKED
);
191 CheckDlgButton(hwndDlg
, IDC_PRESS_CL_KEY_RB
, BST_UNCHECKED
);
195 CheckDlgButton(hwndDlg
, IDC_PRESS_SHIFT_KEY_RB
, BST_UNCHECKED
);
196 CheckDlgButton(hwndDlg
, IDC_PRESS_CL_KEY_RB
, BST_CHECKED
);
199 hwndList
= GetDlgItem(hwndDlg
, IDC_KEY_LISTVIEW
);
201 ListView_SetExtendedListViewStyle(hwndList
, LVS_EX_FULLROWSELECT
);
203 ZeroMemory(&column
, sizeof(column
));
205 column
.mask
= LVCF_FMT
| LVCF_TEXT
| LVCF_WIDTH
| LVCF_SUBITEM
;
207 column
.fmt
= LVCFMT_LEFT
;
209 column
.pszText
= L
"";
211 ListView_InsertColumn(hwndList
, 0, &column
);
213 column
.fmt
= LVCFMT_RIGHT
;
216 column
.pszText
= L
"";
217 ListView_InsertColumn(hwndList
, 1, &column
);
219 UpdateKeySettingsListView(hwndList
);
224 KeySettingsDialogProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
226 UNREFERENCED_PARAMETER(lParam
);
232 OnInitKeySettingsDialog(hwndDlg
);
238 switch (LOWORD(wParam
))
240 case IDC_CHANGE_KEY_SEQ_BTN
:
242 if (DialogBoxParamW(hApplet
,
243 MAKEINTRESOURCEW(IDD_CHANGE_KEY_SEQ
),
245 ChangeKeySeqDialogProc
,
246 (LPARAM
)&_KeySettings
) == IDOK
)
248 UpdateKeySettingsListView(GetDlgItem(hwndDlg
, IDC_KEY_LISTVIEW
));
255 if (IsDlgButtonChecked(hwndDlg
, IDC_PRESS_CL_KEY_RB
) == BST_CHECKED
)
257 _KeySettings
.dwAttributes
&= ~KLF_SHIFTLOCK
;
261 _KeySettings
.dwAttributes
|= KLF_SHIFTLOCK
;
265 EndDialog(hwndDlg
, LOWORD(wParam
));
271 EndDialog(hwndDlg
, LOWORD(wParam
));