4 * FILE: dll/win32/input/changekeyseq.c
6 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
14 GetHotkeys(LPTSTR szHotkey
, LPTSTR szLangHotkey
, LPTSTR szLayoutHotkey
)
19 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Toggle"),
20 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
22 dwSize
= (1 + 1) * sizeof(TCHAR
);
23 if (RegQueryValueEx(hKey
, _T("Hotkey"), NULL
, NULL
,
24 (LPBYTE
)szHotkey
, &dwSize
) != ERROR_SUCCESS
)
30 dwSize
= (1 + 1) * sizeof(TCHAR
);
31 if (RegQueryValueEx(hKey
, _T("Language Hotkey"), NULL
, NULL
,
32 (LPBYTE
)szLangHotkey
, &dwSize
) != ERROR_SUCCESS
)
38 dwSize
= (1 + 1) * sizeof(TCHAR
);
39 if (RegQueryValueEx(hKey
, _T("Layout Hotkey"), NULL
, NULL
,
40 (LPBYTE
)szLayoutHotkey
, &dwSize
) != ERROR_SUCCESS
)
56 TCHAR szLang
[1 + 1], szLayout
[1 + 1];
59 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
61 if (SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
62 _tcscpy(szLang
, _T("2"));
64 _tcscpy(szLang
, _T("1"));
68 _tcscpy(szLang
, _T("3"));
71 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
73 if (SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
74 _tcscpy(szLayout
, _T("2"));
76 _tcscpy(szLayout
, _T("1"));
80 _tcscpy(szLayout
, _T("3"));
83 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Toggle"), 0, NULL
,
84 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
85 NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
87 if (RegSetValueEx(hKey
, _T("Hotkey"), 0, REG_SZ
, (LPBYTE
)szLang
,
88 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
94 if (RegSetValueEx(hKey
, _T("Language Hotkey"), 0, REG_SZ
, (LPBYTE
)szLang
,
95 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
101 if (RegSetValueEx(hKey
, _T("Layout Hotkey"), 0, REG_SZ
, (LPBYTE
)szLayout
,
102 (DWORD
)((1 + 1) * sizeof(TCHAR
))) != ERROR_SUCCESS
)
109 UpdateKeySettingsList();
114 InitChangeKeySeqDlg(HWND hDlg
)
116 TCHAR szHotkey
[1 + 1], szLangHotkey
[1 + 1], szLayoutHotkey
[1 + 1];
118 if (!GetHotkeys(szHotkey
, szLangHotkey
, szLayoutHotkey
))
121 if (_tcscmp(szLangHotkey
, _T("3")) == 0)
123 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
124 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), FALSE
);
125 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), FALSE
);
129 SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_SETCHECK
, 1, 1);
131 if (_tcscmp(szLangHotkey
, _T("1")) == 0)
132 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 1, 1);
134 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
137 if (_tcscmp(szLayoutHotkey
, _T("3")) == 0)
139 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
140 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), FALSE
);
141 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), FALSE
);
145 SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_SETCHECK
, 1, 1);
147 if (_tcscmp(szLayoutHotkey
, _T("1")) == 0)
148 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
150 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 1, 1);
155 ChangeKeySeqDlgProc(HWND hDlg
,
160 UNREFERENCED_PARAMETER(lParam
);
165 InitChangeKeySeqDlg(hDlg
);
169 switch (LOWORD(wParam
))
171 case IDC_SWITCH_INPUT_LANG_CB
:
172 if (HIWORD(wParam
) == BN_CLICKED
)
174 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_INPUT_LANG_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
176 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), TRUE
);
177 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), TRUE
);
181 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LANG
), FALSE
);
182 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LANG
), FALSE
);
187 case IDC_SWITCH_KBLAYOUTS_CB
:
188 if (HIWORD(wParam
) == BN_CLICKED
)
190 if (SendDlgItemMessage(hDlg
, IDC_SWITCH_KBLAYOUTS_CB
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
192 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), TRUE
);
193 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), TRUE
);
197 EnableWindow(GetDlgItem(hDlg
, IDC_CTRL_LAYOUT
), FALSE
);
198 EnableWindow(GetDlgItem(hDlg
, IDC_LEFT_ALT_LAYOUT
), FALSE
);
204 if (HIWORD(wParam
) == BN_CLICKED
)
206 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 1, 1);
207 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 0, 0);
211 case IDC_LEFT_ALT_LANG
:
212 if (HIWORD(wParam
) == BN_CLICKED
)
214 SendDlgItemMessage(hDlg
, IDC_CTRL_LAYOUT
, BM_SETCHECK
, 1, 1);
215 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LAYOUT
, BM_SETCHECK
, 0, 0);
219 case IDC_CTRL_LAYOUT
:
220 if (HIWORD(wParam
) == BN_CLICKED
)
222 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 1, 1);
223 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 0, 0);
227 case IDC_LEFT_ALT_LAYOUT
:
228 if (HIWORD(wParam
) == BN_CLICKED
)
230 SendDlgItemMessage(hDlg
, IDC_CTRL_LANG
, BM_SETCHECK
, 1, 1);
231 SendDlgItemMessage(hDlg
, IDC_LEFT_ALT_LANG
, BM_SETCHECK
, 0, 0);
237 EndDialog(hDlg
, LOWORD(wParam
));
241 EndDialog(hDlg
, LOWORD(wParam
));