Windows как программно переключить раскладку

Windows как программно переключить раскладку

1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
FAQ Раздела Обновления для FAQ Раздела Поиск по Разделу MSDN Library Online

Всех приветствую
На вооружении две функции LoadKeyboardLayout и ActivateKeyboardLayout. Попробуем разобраться с первой, она попроще.
Вот код- чего уж проще, взял да запустил.

Казалось бы, разбираться не в чем, ан нет.
Комилируется, выполняется, только раскладки на русский язык не происходит. Если на панели написано «EN», то «EN» и остаётся и печатаются английские буквы. То же самое происходит при попытке изменить раскладку с русского на английский (при LoadKeyboardLayout («00000409», KLF_ACTIVATE) «RL» не меняется).
Точная указание именно на такой код взято на одном из форумов, отсюда вот

(Изыскания с более сложной функцией ActivateKeyboardLayout есть, тоже неудачны). Спасибо заранее за помощь.

Аха, разбежался. Думаешь содрал где-то код и уже всемогущ? Для покорения мира надо ещё и в МСДН глянуть:

Вот здесь читано, что
Функция ActivateKeyboardLayout активизирует другую раскладку символов на клавиатуре и устанавливает активную раскладку символов в целом для системы. В другом месте прочёл частное мнение некоего форумчанина, что «ActivateKeyBoardLayout переключает раскладку только для ТЕКУЩЕЙ нити/приложения.»Чему верить, не знаю.

Но дело не в этом. Дело в том, что я думаю, что действительно в Windows присутствует такая штука, как «установка раскладки для системы в целом». Я делаю ctrl+shift и во всех окнах у меня устанавливается один и тот же шрифт если он русский, то он русский. Если он английский, то он английский. Один для всех окон.

Теперь по LoadKeyboardLayout. Эта штука не переключает раскладку и в текущем потоке, насколько я могу судить. Я просто компилирую код и остаюсь наверное в этом же потоке, а воз и ныне там. Никакого переключения не происходит. Смысл функции LoadKeyboardLayout в таком случает? Наверное, вернуть HKL. Ну, что ж, попробуем так.

Ростислав Дзинько

Программирование, программирование, программирование.

понедельник, 1 ноября 2010 г.

Python: как программно переключить раскладку клавиатуры в Windows

  • GetKeyboardLayout
  • GetKeyboardLayoutList
  • LoadKeyboardLayout
  1. строка с идентификатором раскладки.
  2. действие
  1. Получить идентификатор раскладки.
  2. Вторым параметром передать действие переключения на загруженную раскладку.

4 комментария:

Я так понял, что значения в реестре для русской раскладки на каждой машине будет одинаковым?
Как себя ведет эта функция, если у пользователя нет такой раскладки: функция LoadKeyboardLayout подключит ее в любом случае или выдаст ошибку?

Читайте также:  Время переустановки mac os

> Я так понял, что значения в реестре для русской раскладки на каждой машине будет одинаковым?

Верно, это идентификаторы раскладок для клавиатуры в ОС Windows XP, Vista, 7, и на всех машинах с данными системами, они одинаковы.

> Как себя ведет эта функция, если у пользователя нет такой раскладки: функция LoadKeyboardLayout подключит ее в любом случае или выдаст ошибку?

Если у пользователя нет такой раскладки LoadKeyboardLayout ее загружает, если есть — не загружает =), так как она уже есть. В этом случае сработает только второй параметр, который скажет, что сделать дальше — в случае, когда значение второго параметра — 1, выполнится переключение раскладки. Есть и другие значения, можно посмотреть в MSDN, в посте есть ссылка.

Как сменить раскладку клавиатуры

Здравствуйте, уважаемые господа.

Каким образом можно сменить раскладку клавиатуры в консольном приложении?
Пробовал таким образом:

Сохранить раскладку клавиатуры в реестре
Добрый день, подскажите как можно сохранить раскладку в реестре, я хочу добавить скажем раскладку.

Определить раскладку клавиатуры и изменить ее
Задания на работу с API-функциями 1. Определить версию операционной системы и платформу.

Программно эмулировать нажатие клавиш, различая регистр и раскладку клавиатуры
Функция keybd_event корректно воспринимает только большие латинские буквы. Регистр и раскладка.

Как программно сменить раскладку клавиатуры
Подскажите пожалуйста, как сменить раскладку клавиатуры на английскую, если в системе установлено.

Почитайте здесь http://www.firststeps.ru/mfc/winapi/keyb/r.php?15
и ниже запись с одного блога (мне правда влом сейчас писать свитчер)
Функция ActivateKeyboardLayout активизирует другую раскладку символов на клавиатуре и устанавливает активную раскладку символов в целом для системы, а не для вызывающего потока.

BOOL ActivateKeyboardLayout(
HKL hkl, // дескриптор раскладки клавиатуры
UINT Flags // флажки раскладки клавиатуры
);

Параметры
hkl — Идентифицирует раскладку символов на клавиатуре, которая будет активизирована. Раскладка должна быть загружена предыдущим вызовом функции LoadKeyboardLayout. Этот параметр должен быть или дескриптор раскладки символов на клавиатуре или одно из следующих значений:

HKL_NEXT — Выбирает следующую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.
HKL_PREV — Выбирает предыдущую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.
Flags — Определяет, какая раскладка символов на клавиатуре должна быть активизирована. Этот параметр может быть одним из следующих значений:

KLF_REORDER — Если этот бит установлен, кольцевой список системы загруженных раскладок символов на клавиатуре переупорядычевается. Если этот бит не установлен, список чередуется без изменения порядка. Например, если пользователь имел активной Английскую раскладку, а также имеет загруженные Французскую, Немецкую и Испанскую раскладки (вот в таком порядке), то активизация Немецкой раскладки с установленным битом KLF_REORDER создаст следующий порядок: Немецкая, Английская, Французская, Испанская раскладки. Активизация Немецкой раскладки без установки значения KLF_REORDER создала бы следующий порядок: Немецкая, Испанская, Английская, Французская раскладки.Если загружены меньше чем три раскладки символов на клавиатуре, значение этого флажка не применяется.
KLF_UNLOADPREVIOUS — Предварительно загружает активную раскладку клавиатуры.
Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения — ИСТИНА (TRUE).
Если функция не выполняет задачу, величина возвращаемого значения — ЛОЖЬ(FALSE). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Читайте также:  Hashing files in linux

Замечания
Несколько раскладок символов на клавиатуре могут быть загруженными в любой момент, но в каждый момент времени активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключиться между раскладками.

Функция LoadKeyboardLayout загружает раскладку символов на клавиатуре.

HKL LoadKeyboardLayout(
LPCTSTR pwszKLID, // адрес буфера с названием раскладки
UINT Flags // флажки раскладки клавиатуры
);

Параметры
pwszKLID — Указывает на буфер, который определяет название раскладки символов на клавиатуре. Название должно быть получено из шестнадцатеричного значения идентификатора языка, соответствующего раскладке. Например, Американский Английский язык имеет идентификатор языка 0x0409, так что первичная Американская Английского языка раскладка называется «00000409». Варианты Американской Английского языка раскладки, типа раскладки Дворака, названы «00010409», «00020409», и так далее. За списком первичных идентификаторов языка и идентификаторов подмножества языка, которые составляют идентификатор языка, следит макрокоманда MAKELANGID.

Flags — Устанавливает, как раскладка символов на клавиатуре должна быть загружена. Этот параметр может быть одним из следующих значений:

KLF_ACTIVATE — Функция загружает раскладку, если она ещё не загружена, и активизирует её. Это значение активизирует раскладку для системы, взятой в целом, а не только для вызывающего потока.
KLF_REORDER — Этот флажок значим, только тогда, если установлен флажок KLF_ACTIVATE, а раскладка уже загружена. Если эти условия выполнены и бит KLF_REORDER установлен, функция удаляет заданную раскладку из её позиции в круговом списке системы загруженных раскладок и перемещает её в голову списка как активную раскладку.Если бит KLF_ACTIVATE установлен и раскладка загружена, но бит KLF_REORDER не установлен, функция просто вращает круговой список загруженных раскладок в системе.Если флажок KLF_ACTIVATE установлен, а раскладка ещё не загружена, она загружается как активная раскладка и вставляется в системный круговой список раскладок клавиатуры впереди активной предыдущей раскладки.
KLF_SUBSTITUTE_OK — Заданная раскладка ищет в конфигурации пользователя (в системном реестре под ключом HKEY_CURRENT_USER\Keyboard Layout\Substitutes) раскладку замены, предпочитаемую пользователем. Например, если в этом разделе имелось значение названия «00000409» равное «00010409», загружается Американская Английского языка раскладка («00000409») с установкой флажка KLF_SUBSTITUTE_OK, который заставит быть загруженной раскладку США Английского языка Дворака («00010409»)
KLF_UNLOADPREVIOUS — Если флажок KLF_ACTIVATE установлен, а раскладка успешно загружена и активизирована, функция выгружает активную предыдущую раскладку. Иначе, функция игнорирует этот флажок.
Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения — дескриптор раскладки символов на клавиатуре.
Если функция не выполняет задачу, величина возвращаемого значения — ПУСТО (NULL). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Читайте также:  Форматирование диска windows cmd

Замечания
Одновременно могут быть загруженными несколько раскладок символов на клавиатуре, но активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключаться между ними.

Windows как программно переключить раскладку

1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
FAQ Раздела Обновления для FAQ Раздела Поиск по Разделу MSDN Library Online

Всех приветствую
На вооружении две функции LoadKeyboardLayout и ActivateKeyboardLayout. Попробуем разобраться с первой, она попроще.
Вот код- чего уж проще, взял да запустил.

Казалось бы, разбираться не в чем, ан нет.
Комилируется, выполняется, только раскладки на русский язык не происходит. Если на панели написано «EN», то «EN» и остаётся и печатаются английские буквы. То же самое происходит при попытке изменить раскладку с русского на английский (при LoadKeyboardLayout («00000409», KLF_ACTIVATE) «RL» не меняется).
Точная указание именно на такой код взято на одном из форумов, отсюда вот

(Изыскания с более сложной функцией ActivateKeyboardLayout есть, тоже неудачны). Спасибо заранее за помощь.

Аха, разбежался. Думаешь содрал где-то код и уже всемогущ? Для покорения мира надо ещё и в МСДН глянуть:

Вот здесь читано, что
Функция ActivateKeyboardLayout активизирует другую раскладку символов на клавиатуре и устанавливает активную раскладку символов в целом для системы. В другом месте прочёл частное мнение некоего форумчанина, что «ActivateKeyBoardLayout переключает раскладку только для ТЕКУЩЕЙ нити/приложения.»Чему верить, не знаю.

Но дело не в этом. Дело в том, что я думаю, что действительно в Windows присутствует такая штука, как «установка раскладки для системы в целом». Я делаю ctrl+shift и во всех окнах у меня устанавливается один и тот же шрифт если он русский, то он русский. Если он английский, то он английский. Один для всех окон.

Теперь по LoadKeyboardLayout. Эта штука не переключает раскладку и в текущем потоке, насколько я могу судить. Я просто компилирую код и остаюсь наверное в этом же потоке, а воз и ныне там. Никакого переключения не происходит. Смысл функции LoadKeyboardLayout в таком случает? Наверное, вернуть HKL. Ну, что ж, попробуем так.

Оцените статью