Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenchangekeyseq.c
Go to the documentation of this file.
00001 /* 00002 * 00003 * PROJECT: input.dll 00004 * FILE: dll/win32/input/changekeyseq.c 00005 * PURPOSE: input.dll 00006 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org) 00007 * UPDATE HISTORY: 00008 * 06-09-2007 Created 00009 */ 00010 00011 #include "input.h" 00012 00013 BOOL 00014 GetHotkeys(LPTSTR szHotkey, LPTSTR szLangHotkey, LPTSTR szLayoutHotkey) 00015 { 00016 HKEY hKey; 00017 DWORD dwSize; 00018 00019 if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Toggle"), 00020 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) 00021 { 00022 dwSize = (1 + 1) * sizeof(TCHAR); 00023 if (RegQueryValueEx(hKey, _T("Hotkey"), NULL, NULL, 00024 (LPBYTE)szHotkey, &dwSize) != ERROR_SUCCESS) 00025 { 00026 RegCloseKey(hKey); 00027 return FALSE; 00028 } 00029 00030 dwSize = (1 + 1) * sizeof(TCHAR); 00031 if (RegQueryValueEx(hKey, _T("Language Hotkey"), NULL, NULL, 00032 (LPBYTE)szLangHotkey, &dwSize) != ERROR_SUCCESS) 00033 { 00034 RegCloseKey(hKey); 00035 return FALSE; 00036 } 00037 00038 dwSize = (1 + 1) * sizeof(TCHAR); 00039 if (RegQueryValueEx(hKey, _T("Layout Hotkey"), NULL, NULL, 00040 (LPBYTE)szLayoutHotkey, &dwSize) != ERROR_SUCCESS) 00041 { 00042 RegCloseKey(hKey); 00043 return FALSE; 00044 } 00045 00046 RegCloseKey(hKey); 00047 } 00048 else return FALSE; 00049 00050 return TRUE; 00051 } 00052 00053 static VOID 00054 SaveKeySeq(HWND hDlg) 00055 { 00056 TCHAR szLang[1 + 1], szLayout[1 + 1]; 00057 HKEY hKey; 00058 00059 if (SendDlgItemMessage(hDlg, IDC_SWITCH_INPUT_LANG_CB, BM_GETCHECK, 0, 0) == BST_CHECKED) 00060 { 00061 if (SendDlgItemMessage(hDlg, IDC_CTRL_LANG, BM_GETCHECK, 0, 0) == BST_CHECKED) 00062 _tcscpy(szLang, _T("2")); 00063 else 00064 _tcscpy(szLang, _T("1")); 00065 } 00066 else 00067 { 00068 _tcscpy(szLang, _T("3")); 00069 } 00070 00071 if (SendDlgItemMessage(hDlg, IDC_SWITCH_KBLAYOUTS_CB, BM_GETCHECK, 0, 0) == BST_CHECKED) 00072 { 00073 if (SendDlgItemMessage(hDlg, IDC_CTRL_LAYOUT, BM_GETCHECK, 0, 0) == BST_CHECKED) 00074 _tcscpy(szLayout, _T("2")); 00075 else 00076 _tcscpy(szLayout, _T("1")); 00077 } 00078 else 00079 { 00080 _tcscpy(szLayout, _T("3")); 00081 } 00082 00083 if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Toggle"), 0, NULL, 00084 REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 00085 NULL, &hKey, NULL) == ERROR_SUCCESS) 00086 { 00087 if (RegSetValueEx(hKey, _T("Hotkey"), 0, REG_SZ, (LPBYTE)szLang, 00088 (DWORD)((1 + 1) * sizeof(TCHAR))) != ERROR_SUCCESS) 00089 { 00090 RegCloseKey(hKey); 00091 return; 00092 } 00093 00094 if (RegSetValueEx(hKey, _T("Language Hotkey"), 0, REG_SZ, (LPBYTE)szLang, 00095 (DWORD)((1 + 1) * sizeof(TCHAR))) != ERROR_SUCCESS) 00096 { 00097 RegCloseKey(hKey); 00098 return; 00099 } 00100 00101 if (RegSetValueEx(hKey, _T("Layout Hotkey"), 0, REG_SZ, (LPBYTE)szLayout, 00102 (DWORD)((1 + 1) * sizeof(TCHAR))) != ERROR_SUCCESS) 00103 { 00104 RegCloseKey(hKey); 00105 return; 00106 } 00107 00108 RegCloseKey(hKey); 00109 UpdateKeySettingsList(); 00110 } 00111 } 00112 00113 static VOID 00114 InitChangeKeySeqDlg(HWND hDlg) 00115 { 00116 TCHAR szHotkey[1 + 1], szLangHotkey[1 + 1], szLayoutHotkey[1 + 1]; 00117 00118 if (!GetHotkeys(szHotkey, szLangHotkey, szLayoutHotkey)) 00119 return; 00120 00121 if (_tcscmp(szLangHotkey, _T("3")) == 0) 00122 { 00123 SendDlgItemMessage(hDlg, IDC_CTRL_LANG, BM_SETCHECK, 1, 1); 00124 EnableWindow(GetDlgItem(hDlg, IDC_CTRL_LANG), FALSE); 00125 EnableWindow(GetDlgItem(hDlg, IDC_LEFT_ALT_LANG), FALSE); 00126 } 00127 else 00128 { 00129 SendDlgItemMessage(hDlg, IDC_SWITCH_INPUT_LANG_CB, BM_SETCHECK, 1, 1); 00130 00131 if (_tcscmp(szLangHotkey, _T("1")) == 0) 00132 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LANG, BM_SETCHECK, 1, 1); 00133 else 00134 SendDlgItemMessage(hDlg, IDC_CTRL_LANG, BM_SETCHECK, 1, 1); 00135 } 00136 00137 if (_tcscmp(szLayoutHotkey, _T("3")) == 0) 00138 { 00139 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LAYOUT, BM_SETCHECK, 1, 1); 00140 EnableWindow(GetDlgItem(hDlg, IDC_CTRL_LAYOUT), FALSE); 00141 EnableWindow(GetDlgItem(hDlg, IDC_LEFT_ALT_LAYOUT), FALSE); 00142 } 00143 else 00144 { 00145 SendDlgItemMessage(hDlg, IDC_SWITCH_KBLAYOUTS_CB, BM_SETCHECK, 1, 1); 00146 00147 if (_tcscmp(szLayoutHotkey, _T("1")) == 0) 00148 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LAYOUT, BM_SETCHECK, 1, 1); 00149 else 00150 SendDlgItemMessage(hDlg, IDC_CTRL_LAYOUT, BM_SETCHECK, 1, 1); 00151 } 00152 } 00153 00154 INT_PTR CALLBACK 00155 ChangeKeySeqDlgProc(HWND hDlg, 00156 UINT message, 00157 WPARAM wParam, 00158 LPARAM lParam) 00159 { 00160 UNREFERENCED_PARAMETER(lParam); 00161 00162 switch (message) 00163 { 00164 case WM_INITDIALOG: 00165 InitChangeKeySeqDlg(hDlg); 00166 break; 00167 00168 case WM_COMMAND: 00169 switch (LOWORD(wParam)) 00170 { 00171 case IDC_SWITCH_INPUT_LANG_CB: 00172 if (HIWORD(wParam) == BN_CLICKED) 00173 { 00174 if (SendDlgItemMessage(hDlg, IDC_SWITCH_INPUT_LANG_CB, BM_GETCHECK, 0, 0) == BST_CHECKED) 00175 { 00176 EnableWindow(GetDlgItem(hDlg, IDC_CTRL_LANG), TRUE); 00177 EnableWindow(GetDlgItem(hDlg, IDC_LEFT_ALT_LANG), TRUE); 00178 } 00179 else 00180 { 00181 EnableWindow(GetDlgItem(hDlg, IDC_CTRL_LANG), FALSE); 00182 EnableWindow(GetDlgItem(hDlg, IDC_LEFT_ALT_LANG), FALSE); 00183 } 00184 } 00185 break; 00186 00187 case IDC_SWITCH_KBLAYOUTS_CB: 00188 if (HIWORD(wParam) == BN_CLICKED) 00189 { 00190 if (SendDlgItemMessage(hDlg, IDC_SWITCH_KBLAYOUTS_CB, BM_GETCHECK, 0, 0) == BST_CHECKED) 00191 { 00192 EnableWindow(GetDlgItem(hDlg, IDC_CTRL_LAYOUT), TRUE); 00193 EnableWindow(GetDlgItem(hDlg, IDC_LEFT_ALT_LAYOUT), TRUE); 00194 } 00195 else 00196 { 00197 EnableWindow(GetDlgItem(hDlg, IDC_CTRL_LAYOUT), FALSE); 00198 EnableWindow(GetDlgItem(hDlg, IDC_LEFT_ALT_LAYOUT), FALSE); 00199 } 00200 } 00201 break; 00202 00203 case IDC_CTRL_LANG: 00204 if (HIWORD(wParam) == BN_CLICKED) 00205 { 00206 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LAYOUT, BM_SETCHECK, 1, 1); 00207 SendDlgItemMessage(hDlg, IDC_CTRL_LAYOUT, BM_SETCHECK, 0, 0); 00208 } 00209 break; 00210 00211 case IDC_LEFT_ALT_LANG: 00212 if (HIWORD(wParam) == BN_CLICKED) 00213 { 00214 SendDlgItemMessage(hDlg, IDC_CTRL_LAYOUT, BM_SETCHECK, 1, 1); 00215 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LAYOUT, BM_SETCHECK, 0, 0); 00216 } 00217 break; 00218 00219 case IDC_CTRL_LAYOUT: 00220 if (HIWORD(wParam) == BN_CLICKED) 00221 { 00222 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LANG, BM_SETCHECK, 1, 1); 00223 SendDlgItemMessage(hDlg, IDC_CTRL_LANG, BM_SETCHECK, 0, 0); 00224 } 00225 break; 00226 00227 case IDC_LEFT_ALT_LAYOUT: 00228 if (HIWORD(wParam) == BN_CLICKED) 00229 { 00230 SendDlgItemMessage(hDlg, IDC_CTRL_LANG, BM_SETCHECK, 1, 1); 00231 SendDlgItemMessage(hDlg, IDC_LEFT_ALT_LANG, BM_SETCHECK, 0, 0); 00232 } 00233 break; 00234 00235 case IDOK: 00236 SaveKeySeq(hDlg); 00237 EndDialog(hDlg, LOWORD(wParam)); 00238 break; 00239 00240 case IDCANCEL: 00241 EndDialog(hDlg, LOWORD(wParam)); 00242 break; 00243 } 00244 break; 00245 } 00246 00247 return FALSE; 00248 } 00249 00250 /* EOF */ Generated on Mon May 28 2012 04:20:34 for ReactOS by
1.7.6.1
|