mkostrikin / keyla

Automatically exported from code.google.com/p/keyla
Other
0 stars 0 forks source link

Не различает способы ввода. #12

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
Система: Windows XP SP3
Установлены русский и японский языки.
Список раскладок в опция keyla выглядит так:
 Language     Shortcut                         Use when switching 
1.Japanese                                            No
2.Japanese                                            Yes
3.Russian        Left Alt + Left Shift + 3            Yes
4.Japanese                                            No
Японский язык один, но способов ввода три. 
Два ставятся по умолчанию - Microsoft IME и Microsoft 
Natural, плюс я еще поставил Google Input, но для 
циклической смены раскладок мне нужна 
только одна из них - №2, кстати, т.к. в 
диалоге настроек keyla они все называются 
одинаково "Japanese", приходится методом тыка 
подбирать нужную). После перезапуска 
программы, из строчки №2 слетает галочка 
"Yes" и приходится каждый раз ставить вручную.

Original issue reported on code.google.com by kreli...@gmail.com on 20 Sep 2011 at 7:51

GoogleCodeExporter commented 9 years ago
Прошу прощения, что продублировал уже 
известные проблемы. Ниже быстрая и 
некрасивая заплатка, исправляющая это.

    tstring layoutLangId(HKL layout) {
        TCHAR buf[KL_NAMELENGTH];
        swprintf(buf, KL_NAMELENGTH, TEXT("%08X"), layout);
        return tstring(buf);
    }

    tstring layoutLanguage(HKL layout) {
        TCHAR langNameBuffer[KL_NAMELENGTH]; langNameBuffer[0] = 0;
        if (LOWORD((DWORD)layout) == HIWORD((DWORD)layout)) 
            layout = (HKL)LOWORD((DWORD)layout);
        swprintf(langNameBuffer, KL_NAMELENGTH, TEXT("%08X"), layout);
        DWORD keyNameBufferSize = 256;
        TCHAR keyNameBuffer[256]; keyNameBuffer[0] = 0;
        swprintf(keyNameBuffer, keyNameBufferSize, TEXT("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), langNameBuffer);
        HKEY hkResult = 0;
        if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyNameBuffer, 0, KEY_READ, &hkResult)) {
            keyNameBufferSize = sizeof(TCHAR) * keyNameBufferSize;
            RegQueryValueEx(hkResult, TEXT("Layout Text"), NULL, NULL, (LPBYTE)&keyNameBuffer, &keyNameBufferSize);
            RegCloseKey(hkResult);
        }
        return tstring(keyNameBuffer);
    }

Original comment by kreli...@gmail.com on 21 Sep 2011 at 7:21