
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.206.194.21] |
![]() |
|
![]() |
|
|
У меня установлено 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 |
![]() |
|
|
В операционной системе 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. |