Я пытаюсь написать код, который переключает языковую раскладку в Windows, но код по какой то причине не переключает раскладку системы
void SwitchKeyboardLayout()
{
const int MAX_LAYOUTS = 256;
std::vector<HKL> layouts(MAX_LAYOUTS);
int numLayouts = GetKeyboardLayoutList(MAX_LAYOUTS, layouts.data());
HKL currentLayout = GetKeyboardLayout(0);
if (numLayouts == 0)
{
std::cerr << "Failed to get keyboard layout list." << std::endl;
return;
}
std::cout << "Current layout: " << std::hex << currentLayout << std::dec << std::endl;
std::cout << "Number of installed keyboard layouts: " << numLayouts << std::endl;
for (int i = 0; i < numLayouts; i++)
{
std::cout << "Layout " << i + 1 << ": " << std::hex << layouts[i] << std::dec << std::endl;
}
// Найти текущую раскладку в списке
int currentIndex = -1;
for (int i = 0; i < numLayouts; i++)
{
if (layouts[i] == currentLayout)
{
currentIndex = i;
break;
}
}
if (currentIndex == -1)
{
std::cerr << "Current keyboard layout not found in the list." << std::endl;
return;
}
// Переключиться на следующую раскладку
int nextIndex = (currentIndex + 1) % numLayouts;
HKL nextLayout = layouts[nextIndex];
// Используем ActivateKeyboardLayout для смены раскладки
HKL result = ActivateKeyboardLayout(nextLayout, KLF_SETFORPROCESS);
if (result == NULL)
{
std::cerr << "Failed to switch keyboard layout." << std::endl;
}
else
{
std::cout << "Switched to the next keyboard layout: " << std::hex << result << std::dec << std::endl;
}
}
Current layout: 0x4090409
Number of installed keyboard layouts: 3
Layout 1: 0x4090409
Layout 2: 0x4050405
Layout 3: 0x4190419
Switched to the next keyboard layout: 0x4090409
Current layout: 0x4050405
Number of installed keyboard layouts: 3
Layout 1: 0x4090409
Layout 2: 0x4050405
Layout 3: 0x4190419
Вот лог (системная раскладка при этом не меняется)