ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

changekeyseq.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.