4 * FILE: dll/win32/input/changekeyseq.c
6 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
15 GetHotkeys(LPTSTR szHotkey
, LPTSTR szLangHotkey
, LPTSTR szLayoutHotkey
)
20 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Toggle"),
21 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
23 dwSize
= (1 + 1) * sizeof(TCHAR
);
24 if (RegQueryValueEx(hKey
, _T("Hotkey"), NULL
, NULL
,
25 (LPBYTE
)szHotkey
, &dwSize
) != ERROR_SUCCESS
)
31 dwSize
= (1 + 1) * sizeof(TCHAR
);
32 if (RegQueryValueEx(hKey
, _T("Language Hotkey"), NULL
, NULL
,
33 (LPBYTE
)szLangHotkey
, &dwSize
) != ERROR_SUCCESS
)
39 dwSize
= (1 + 1) * sizeof(TCHAR
);
40 if (RegQueryValueEx(hKey
, _T("Layout Hotkey"), NULL
, NULL
,
41 (LPBYTE
)szLayoutHotkey
, &dwSize
) != ERROR_SUCCESS
)
57 TCHAR szLang
[1 + 1], szLayout
[1 + 1];
60 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
62 if (SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
63 _tcscpy(szLang
, _T("2"));
65 _tcscpy(szLang
, _T("1"));
69 _tcscpy(szLang
, _T("3"));
72 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
74 if (SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
75 _tcscpy(szLayout
, _T("2"));
77 _tcscpy(szLayout
, _T("1"));
81 _tcscpy(szLayout
, _T("3"));
84 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Toggle"), 0, NULL
,
85 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
86 NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
88 if (RegSetValueEx(hKey
, _T("Hotkey"), 0, REG_SZ
, (LPBYTE
)szLang
,
89 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
95 if (RegSetValueEx(hKey
, _T("Language Hotkey"), 0, REG_SZ
, (LPBYTE
)szLang
,
96 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
102 if (RegSetValueEx(hKey
, _T("Layout Hotkey"), 0, REG_SZ
, (LPBYTE
)szLayout
,
103 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
110 UpdateKeySettingsList();
115 InitChangeKeySeqDlg(HWND hDlg
)
117 TCHAR szHotkey
[1 + 1], szLangHotkey
[1 + 1], szLayoutHotkey
[1 + 1];
119 if (!GetHotkeys(szHotkey
, szLangHotkey
, szLayoutHotkey
))
122 if (_tcscmp(szLangHotkey
, _T("3")) == 0)
124 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
125 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), FALSE
);
126 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), FALSE
);
130 SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_SETCHECK
, 1, 1);
132 if (_tcscmp(szLangHotkey
, _T("1")) == 0)
133 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 1, 1);
135 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
138 if (_tcscmp(szLayoutHotkey
, _T("3")) == 0)
140 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
141 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), FALSE
);
142 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), FALSE
);
146 SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_SETCHECK
, 1, 1);
148 if (_tcscmp(szLayoutHotkey
, _T("1")) == 0)
149 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
151 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 1, 1);
156 ChangeKeySeqDlgProc(HWND hDlg
,
161 UNREFERENCED_PARAMETER(lParam
);
166 InitChangeKeySeqDlg(hDlg
);
170 switch (LOWORD(wParam
))
172 case IDC_SWITCH_INPUT_LANG_CB
:
173 if (HIWORD(wParam
) == BN_CLICKED
)
175 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
177 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), TRUE
);
178 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), TRUE
);
182 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), FALSE
);
183 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), FALSE
);
188 case IDC_SWITCH_KBLAYOUTS_CB
:
189 if (HIWORD(wParam
) == BN_CLICKED
)
191 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
193 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), TRUE
);
194 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), TRUE
);
198 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), FALSE
);
199 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), FALSE
);
205 if (HIWORD(wParam
) == BN_CLICKED
)
207 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
208 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 0, 0);
212 case IDC_LEFT_ALT_LANG
:
213 if (HIWORD(wParam
) == BN_CLICKED
)
215 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 1, 1);
216 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 0, 0);
220 case IDC_CTRL_LAYOUT
:
221 if (HIWORD(wParam
) == BN_CLICKED
)
223 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 1, 1);
224 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 0, 0);
228 case IDC_LEFT_ALT_LAYOUT
:
229 if (HIWORD(wParam
) == BN_CLICKED
)
231 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
232 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 0, 0);
238 EndDialog(hDlg
, LOWORD(wParam
));
242 EndDialog(hDlg
, LOWORD(wParam
));