 Как узнать имя клавиатуры для определенной раскладки?
    Как узнать имя клавиатуры для определенной раскладки?
    
  |  | Наши проекты: Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту | |
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.107] | 
|   | 
 | 
 Правила раздела Visual C++ / MFC / WTL (далее Раздела)
    Правила раздела Visual C++ / MFC / WTL (далее Раздела)
   FAQ Раздела
 FAQ Раздела   Обновления для FAQ Раздела
 Обновления для FAQ Раздела    Поиск по Разделу
 Поиск по Разделу   MSDN Library Online
 MSDN Library Online Как узнать имя клавиатуры для определенной раскладки?
    Как узнать имя клавиатуры для определенной раскладки?
    
  |  Сообщ.
           #1
          
          , | |
|  |  У меня установлено 2 языка — английский и русский. Русский имеет две клавиатуры — обычная и мнемоническая:  Запускаю код:   UINT uLayouts; HKL  *lpList = NULL; wchar_t szBufLng[512], szBufCtry[512]; uLayouts = GetKeyboardLayoutList(0, NULL); lpList   = (HKL*)LocalAlloc(LPTR, (uLayouts * sizeof(HKL))); uLayouts = GetKeyboardLayoutList(uLayouts, lpList); for(int i = 0; i < uLayouts; ++i) {     GetLocaleInfo(MAKELCID(((UINT)lpList[i] & 0xffffffff),      SORT_DEFAULT), LOCALE_SISO639LANGNAME, szBufLng, 512);     GetLocaleInfo(MAKELCID(((UINT)lpList[i] & 0xffffffff),      SORT_DEFAULT), LOCALE_SISO3166CTRYNAME, szBufCtry, 512);     wprintf(L"%s-%s, %x\n", szBufLng, szBufCtry, (UINT)lpList[i]);     memset(szBufLng, 0, 512);     memset(szBufCtry, 0, 512); } if(lpList)     LocalFree(lpList); И получаю такой результат: en-US, 04090409 ru-RU, 04190419 ru-RU, f0330419 Подскажите, пожалуйста, как отличить мнемоническую клавиатуру или получить её название (Windows ведь её как-то отличил на снимке выше), чтобы получить что-то вроде этого: en-US, 04090409 ru-RU, 04190419 rum-RU, f0330419 | 
|  Сообщ.
           #2
          
          , | |
|  |  В операционной системе Windows можно получить текущую раскладку клавиатуры и соответствующее ей имя клавиатуры с помощью функции GetKeyboardLayoutName. Эта функция возвращает строку с идентификатором раскладки, который можно использовать для получения имени клавиатуры с помощью функции GetKeyboardLayout. Пример кода на C++ для получения имени текущей клавиатуры:   #include <Windows.h> #include <iostream> int main() {     // Получаем идентификатор текущей раскладки     HKL currentLayout = GetKeyboardLayout(0);     WCHAR layoutName[KL_NAMELENGTH];     // Получаем имя клавиатуры     if (GetKeyboardLayoutNameW(layoutName)) {         // Выводим имя клавиатуры на консоль         std::wcout << "Current keyboard layout: " << layoutName << std::endl;     }     return 0; } Этот код выводит имя текущей клавиатуры на консоль. Если вам нужно получить имя клавиатуры для определенной раскладки, то передайте соответствующий идентификатор раскладки в функцию GetKeyboardLayout. |