|
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
|
||||||
Как сменить раскладку клавиатуры16.12.2011, 10:22. Показов 20598. Ответов 12
Метки нет (Все метки)
Здравствуйте, уважаемые господа.
Каким образом можно сменить раскладку клавиатуры в консольном приложении? Пробовал таким образом:
Раскладка появляется в списке доступных, но активной не становится. Почему? Пробовал также ActivateKeyboardLayout. Что не так? Заранее благодарю за возможные ответы.
0
|
||||||
| 16.12.2011, 10:22 | |
|
Ответы с готовыми решениями:
12
Сохранить раскладку клавиатуры в реестре Определить раскладку клавиатуры и изменить ее Программно эмулировать нажатие клавиш, различая регистр и раскладку клавиатуры |
|
|
|
| 16.12.2011, 12:12 | |
|
Почитайте здесь 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. Замечания Несколько раскладок символов на клавиатуре могут быть загруженными в любой момент, но в каждый момент времени активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключиться между раскладками. ________________________________________ ___ Функция 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. Замечания Одновременно могут быть загруженными несколько раскладок символов на клавиатуре, но активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключаться между ними.
1
|
|
|
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
|
|
| 16.12.2011, 14:51 [ТС] | |
|
Да, уже видел.
К тому же, я сказал, что использовал уже как LoadKeyboardLayout, так и ActivateKeyboardLayout с разными флагами.
0
|
|
|
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
|
||||||||||||
| 17.12.2011, 15:16 [ТС] | ||||||||||||
|
Почему-то не работает даже проверка на то, какая именно раскладка стоит у пользователя в данный момент.
Насколько я понял, делать это надо при помощи функции GetKeyboardLayout. http://msdn.microsoft.com/en-u... s.85).aspx В качестве единственного параметра функции передаю значение 0, т.к. мне необходимо узнать раскладку именно для текущего потока. Читаем MSDN:
http://msdn.microsoft.com/en-u... s.85).aspx Для русской раскладки значение должно быть равно 0x0419. Следовательно, делаем проверку в программе:
Что я делаю не так?
0
|
||||||||||||
|
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
|
|
| 17.12.2011, 19:11 | |
|
Не может такого быть, ты где-то напортачил. Вылаживай код с проверкой, посмотрим.
0
|
|
|
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
|
||||||
| 17.12.2011, 20:46 [ТС] | ||||||
|
Так ведь это и есть вся проверка.
std::cout << GetKeyboardLayout (0); то на экран в любом случае выводится 04190419, несмотря на то, какая именно раскладка сейчас стоит. Почему?
0
|
||||||
|
32 / 32 / 4
Регистрация: 19.12.2011
Сообщений: 72
|
||||||
| 21.12.2011, 08:16 | ||||||
Сообщение было отмечено как решение
Решение
Вот:
Вот, собственно. Можно ещё и WM_INPUTLANGCHANGE глянуть. Оно?
7
|
||||||
|
lordkim
|
|
| 23.07.2012, 19:38 | |
|
2kisssko:
Не нашел кнопку "Спасибо"! Не спал, простите, всю ночь, не работало ни ActivateKeyboardLayout ни Load А теперь заработало! =) |
|
|
из племени тумба-юбма
|
||||||
| 12.02.2021, 12:43 | ||||||
|
Мне тоже надо похожее, но как я понял WinAPI - это отдельная тема и к языку Си не имеет отношения. Написал интуитивно на подобном примере из темы, вроде работает. Поправьте пожалуйста если не так что то. Код для Си
0
|
||||||
|
Just Do It!
|
||||||
| 12.02.2021, 22:04 | ||||||
Сообщение было отмечено мама Стифлера как решение
Решение
мама Стифлера,
у меня это работает:
0
|
||||||
|
из племени тумба-юбма
|
|
| 12.02.2021, 22:41 | |
|
XLAT, ооо я уже забыл про эту тему, прошу прощения
Пока рыскал в поисках ответов, успел нафлудить в чужих темах.Моя тема тут и как бы все уже решил и работает, ну если только последний пост. Возможно, или нет. Си (Windows API) не запускается файл
0
|
|
|
из племени тумба-юбма
|
||
| 12.02.2021, 23:01 | ||
|
1
|
||
| 12.02.2021, 23:01 | |
|
Помогаю со студенческими работами здесь
13
Как программно сменить раскладку клавиатуры
Автоматически сменить раскладку клавиатуры Как определить раскладку клавиатуры? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|