Можно ли перечислить все доступные в настоящее время раскладки клавиатуры.Под доступным я подразумеваю, что пользователь может переключаться на них, нажимая Alt + Shift (или любой другой выбранный им ярлык), т.е. они находятся в меню языковой панели.
В качестве альтернативы, было бы полезно проверить, доступен ли конкретный макет на языковой панели.
Редактировать:
Большое спасибо@ Олег, я наконец-то сделал функцию, которая работает:
bool IsActiveKeyboardLayout(DWORD dwPrimaryLangID)
{
TCHAR buf[KL_NAMELENGTH];
GetKeyboardLayoutName(buf);
DWORD dwActiveLangID = 0;
_stscanf(buf, _T("%X"), &dwActiveLangID);
if (dwPrimaryLangID == PRIMARYLANGID(dwActiveLangID))
return true;
return false;
}
bool IsKeyboardLayoutPresent(DWORD dwPrimaryLangID)
{
if (IsActiveKeyboardLayout(dwPrimaryLangID))
return true;
DWORD dwThreadID = GetCurrentThreadId();
HKL hOld = GetKeyboardLayout(dwThreadID);
for (;;)
{
ActivateKeyboardLayout((HKL) HKL_NEXT, 0);
if (hOld == GetKeyboardLayout(dwThreadID))
return false;
if (IsActiveKeyboardLayout(dwPrimaryLangID))
{
ActivateKeyboardLayout(hOld, 0);
return true;
}
}
}