Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706

Переключить язык ввода

11.04.2015, 08:45. Показов 3409. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как программно переключить язык ввода?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2015, 08:45
Ответы с готовыми решениями:

Переключить язык ввода
Всем добрый вечер. Подскажите, плз, можно ли средствами VBA переключить язык ввода клавиатуры с рус. на анг.?

Как переключить язык ввода с консоли
Пробую через LoadKeyboardLayout(), ActivateKeyboardLayout(). Переключение, вроде бы, происходит, сначала GetKeyboardLayoutName() выдаёт...

Как получить список установленных языков в системе? И программно переключить язык ввода
Привет, ребят, необходимо узнать список языков, которые установлены в системе у пользователя (ubuntu) и добавить этот список в QMenu. И...

9
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.04.2015, 10:16
Лучший ответ Сообщение было отмечено lss как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/XKBlib.h>
 
int main()
{
    int xkbGroup = 0;
    int event_rtrn, error_rtrn, reason_rtrn;
    Display* display = XkbOpenDisplay(NULL, &event_rtrn, &error_rtrn,
                                  NULL, NULL, &reason_rtrn);
    if(display == NULL)
    {
        fprintf(stderr, "Cannot open display!");
        exit(EXIT_FAILURE);
    }
    /* индекс группы xkbGroup меняем в зависимости от нужной раскладки */
    XkbLockGroup(display, XkbUseCoreKbd, xkbGroup);
    XCloseDisplay(display);
    return 0;
}
2
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.04.2015, 16:50  [ТС]
Ничего не понимаю в Linux, программа на Qt, там нет такой возможности, поэтому возник вопрос. Не понял, что значит это:
Цитата Сообщение от retmas Посмотреть сообщение
/* индекс группы xkbGroup меняем в зависимости от нужной раскладки */
Например, перключить нужно на английский ввод. Как это будет выглядеть в коде?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.04.2015, 18:49
Цитата Сообщение от retmas Посмотреть сообщение
/* индекс группы xkbGroup меняем в зависимости от нужной раскладки */
xkb поддерживает до 4 keysym групп. соответственно эти группы индексируются от 0 до 3. вот индекс нужной группы клавиатурных символов и указываем.
если, например, есть две раскладки: первая us, вторая ru
C
1
2
int xkbGroup = 0; /* us */
int xkbGroup = 1; /* ru */
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.04.2015, 22:05  [ТС]
Цитата Сообщение от retmas Посмотреть сообщение
индекс нужной группы
Как узнать индекс нужной группы? Это индексы фиксированные для языков или зависят от настроек пользователя?
Цитата Сообщение от retmas Посмотреть сообщение
если, например, есть две раскладки: первая us, вторая ru
Всегда так?
Задача такая: программа работает, у какого-то пользователя, в ОС Linux, при активации окна программы, язык ввода преключается на английский. В Windouws, это делается через:
C++
1
PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, 1, 0x04090409);
, или:
C++
1
LoadKeyboardLayout(L"00000409", KLF_ACTIVATE);
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.04.2015, 22:50
Цитата Сообщение от lss Посмотреть сообщение
Как узнать индекс нужной группы? Это индексы фиксированные для языков или зависят от настроек пользователя?
нет не фиксированные. например, если в системе вместо ru стоит ua, соответственно
C
1
2
int xkbGroup = 0; /* us */
int xkbGroup = 1; /* ua */
какие лэйауты keysym мапов установлены, прописывается в конфигах. по крайней мере в старых дистрибутивах в Xorg.conf что-то было вроде этого. в нынешних дистрибутивах даже не везде по дефолту этот файлик есть. так что, где это прописано, вероятно, зависит от дистрибутива(на ubuntu в одном месте, на suse - в другом). где точнее я не знаю. даже то, что индекс 0, вседа для us - мое предположение(но скорее всего это так)
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
12.04.2015, 15:30
К сожалению, не знаю, как на C делается.

Группы у каждого пользователя свои. Ими занимается или переключалка клавиатуры (у каждого своя), или просто человек может при загрузке вызывать setxkbmap. Или не только при загрузке.

Из терминала конфигурацию клавиатуры (группы, в том числе) можно узнать с помощью
Bash
1
$ setxkbmap -print
Есть, кстати, какие-то включатели раскладок, но совсем не помню, как называются.
1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
14.04.2015, 00:13
А теперь ещё веселее будет:
Некоторым DE наплевать на то, что прописано в /etc/X11/xorg.conf или в /etc/X11/xorg.conf.d/* . У мну, например, единственная настройка клавы, касающаяся непосредственно X`ов это:
Bash
1
2
3
4
5
6
Section "InputDevice"                                                                                                                                                    
                                                                                                                                                                         
    # generated from default                                                                                                                                             
    Identifier     "Keyboard0"                                                                                                                                           
    Driver         "kbd"                                                                                                                                                 
EndSection
А КДЕ уже сами разруливают нужную кодировку, в зависимости от своих настроек.

Надо обстрагироваться от понятия "как в винде". Линукс - ядро, потом базовая система, потом сервер графики Xorg(или ещё что-то вроде wayland), потом уже ДЕ - и от неё зависит как и что делать с клавой (отдать на откуп серверу Xorg(как советовали выше) или рулить самой ДЕ, как в КДЕ и многих других).

Подобные вещи универсальными сложно сделать...
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
14.04.2015, 01:23
Всё-таки KDE пользуется тем же самым xkb. И, например, setxkbmap -print выводит ожидаемый список групп.
0
 Аватар для niesoft
16 / 9 / 3
Регистрация: 15.04.2009
Сообщений: 29
04.01.2016, 10:02
retmas, твой код и вправду переключает раскладку, только система на это не совсем адекватно реагирует..

т.е переключаю твоим кодом раскладку - пишет русскими буквами, а в трее висит en и если заюзать тот же х11 то XkbGetNames говорит что раскладка English (US)....

может имитировать нажатие комбинации клавиш? не будем примера как это делается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2016, 10:02
Помогаю со студенческими работами здесь

Как получить список установленных языков в системе? И программно переключить язык ввода
Привет, ребят, необходимо узнать список языков, которые установлены в системе у пользователя (ubuntu) и добавить этот список в QMenu. И...

Как переключить язык?
На домашнем компе работает переключение языков в Паскале стандартано: справа-русский, слева-английский. Стоит ХР! Но! Как выхожу из...

Как переключить язык на английский?
собственно сегодня обновил свой Ubuntu до версии 13.10. Пк перезагрузился, я захожу в панель авторизации и при входе в Ubuntu по...

Как переключить язык клавы глобально?
Что нужно добавить в код, чтобы переключение языка происходило глобально, а не только на форме? ...

Как програмно переключить язык с английского на русский?
Сабж


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru