3 * FILE: dll/win32/input/changekeyseq.c
5 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
13 GetHotkeys(LPTSTR szHotkey
, LPTSTR szLangHotkey
, LPTSTR szLayoutHotkey
)
18 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Toggle"),
19 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
21 dwSize
= (1 + 1) * sizeof(TCHAR
);
22 if (RegQueryValueEx(hKey
, _T("Hotkey"), NULL
, NULL
,
23 (LPBYTE
)szHotkey
, &dwSize
) != ERROR_SUCCESS
)
29 dwSize
= (1 + 1) * sizeof(TCHAR
);
30 if (RegQueryValueEx(hKey
, _T("Language Hotkey"), NULL
, NULL
,
31 (LPBYTE
)szLangHotkey
, &dwSize
) != ERROR_SUCCESS
)
37 dwSize
= (1 + 1) * sizeof(TCHAR
);
38 if (RegQueryValueEx(hKey
, _T("Layout Hotkey"), NULL
, NULL
,
39 (LPBYTE
)szLayoutHotkey
, &dwSize
) != ERROR_SUCCESS
)
55 TCHAR szLang
[1 + 1], szLayout
[1 + 1];
58 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
60 if (SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
61 _tcscpy(szLang
, _T("2"));
63 _tcscpy(szLang
, _T("1"));
67 _tcscpy(szLang
, _T("3"));
70 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
72 if (SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
73 _tcscpy(szLayout
, _T("2"));
75 _tcscpy(szLayout
, _T("1"));
79 _tcscpy(szLayout
, _T("3"));
82 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Toggle"), 0, NULL
,
83 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
84 NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
86 if (RegSetValueEx(hKey
, _T("Hotkey"), 0, REG_SZ
, (LPBYTE
)szLang
,
87 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
93 if (RegSetValueEx(hKey
, _T("Language Hotkey"), 0, REG_SZ
, (LPBYTE
)szLang
,
94 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
100 if (RegSetValueEx(hKey
, _T("Layout Hotkey"), 0, REG_SZ
, (LPBYTE
)szLayout
,
101 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
108 UpdateKeySettingsList();
113 InitChangeKeySeqDlg(HWND hDlg
)
115 TCHAR szHotkey
[1 + 1], szLangHotkey
[1 + 1], szLayoutHotkey
[1 + 1];
117 if (!GetHotkeys(szHotkey
, szLangHotkey
, szLayoutHotkey
))
120 if (_tcscmp(szLangHotkey
, _T("3")) == 0)
122 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
123 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), FALSE
);
124 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), FALSE
);
128 SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_SETCHECK
, 1, 1);
130 if (_tcscmp(szLangHotkey
, _T("1")) == 0)
131 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 1, 1);
133 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
136 if (_tcscmp(szLayoutHotkey
, _T("3")) == 0)
138 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
139 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), FALSE
);
140 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), FALSE
);
144 SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_SETCHECK
, 1, 1);
146 if (_tcscmp(szLayoutHotkey
, _T("1")) == 0)
147 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
149 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 1, 1);
154 ChangeKeySeqDlgProc(HWND hDlg
,
159 UNREFERENCED_PARAMETER(lParam
);
164 InitChangeKeySeqDlg(hDlg
);
168 switch (LOWORD(wParam
))
170 case IDC_SWITCH_INPUT_LANG_CB
:
171 if (HIWORD(wParam
) == BN_CLICKED
)
173 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
175 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), TRUE
);
176 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), TRUE
);
180 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), FALSE
);
181 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), FALSE
);
186 case IDC_SWITCH_KBLAYOUTS_CB
:
187 if (HIWORD(wParam
) == BN_CLICKED
)
189 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
191 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), TRUE
);
192 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), TRUE
);
196 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), FALSE
);
197 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), FALSE
);
203 if (HIWORD(wParam
) == BN_CLICKED
)
205 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
206 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 0, 0);
210 case IDC_LEFT_ALT_LANG
:
211 if (HIWORD(wParam
) == BN_CLICKED
)
213 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 1, 1);
214 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 0, 0);
218 case IDC_CTRL_LAYOUT
:
219 if (HIWORD(wParam
) == BN_CLICKED
)
221 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 1, 1);
222 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 0, 0);
226 case IDC_LEFT_ALT_LAYOUT
:
227 if (HIWORD(wParam
) == BN_CLICKED
)
229 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
230 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 0, 0);
236 EndDialog(hDlg
, LOWORD(wParam
));
240 EndDialog(hDlg
, LOWORD(wParam
));