Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 16

Получения раскладки в цикле

10.05.2017, 17:10. Показов 2362. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, проблема в следующем. Нужно получить раскладку, это я сделал. Проблема не в этом, а в том, что в цикле при смене она не меняется, то есть какая на старте была раскладка - такая и осталась в отображении. Вот кодес, что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <windows.h>
#include <iostream>
using namespace std;
void main()
{
    do
    {
        HKL hk = GetKeyboardLayout(0);
        int lang = LOWORD(hk);
        if (lang == 0x0419)
        {
            cout << "RUS";
        }
        if (lang == 0x0409)
        {
            cout << "ENG";
        }
        Sleep(1000);
    } while (1);
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2017, 17:10
Ответы с готовыми решениями:

Рассчитать, какое количество лет в среднем необходимо ожидать получения квартиры, и вывести на экран весь список с указанием ожидаемого года получения
Имеется список учета нуждающихся в улучшении жилищных условий. Каждая запись этого списка содержит фамилию, имя, отчество и дату постановки...

Как програмно в цикле не доходя до конца, пропустить шаг в цикле?
Как програмно в цикле не доходя до конца, пропустить шаг в цикле?

При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти
При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти. Что не так и как правильно сделать? Не пинайте нуба! ...

5
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.05.2017, 17:14
WM_INPUTLANGCHANGE message
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
10.05.2017, 17:15
Так как раскладка клавиатуры может быть изменена динамически, приложения, которые кэшируют информацию о текущей раскладке, должны обрабатывать сообщение WM_INPUTLANGCHANGE, которое информирует об изменении языка ввода данных.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.05.2017, 17:16
У каждого потока раскладка своя.
GetKeyboardLayout(0) возвращает id раскладки текущего потока
(т.е. того потока, который вызывает эту функцию).

А чтобы определить поток, который в данный момент владеет фокусом ввода,
нужно сделать следующее: сначала через GetGUIThreadInfo получить HWND
соответствующего окна (см. поле hwndFocus структуры GUITHREADINFO), а
затем вызвать GetWindowThreadProcessId, получив id потока.
Ну и далее уже этот id передавать в GetKeyboardLayout.

P.S. Для консольных приложений это не будет работать, там способ определения
раскладки намного более сложный и недокументированный.
0
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 16
10.05.2017, 17:18  [ТС]
а не затруднит ли вас пример? понять не могу что с этим делать, гуглю, но что то примеров не нашел
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.05.2017, 17:27
Лучший ответ Сообщение было отмечено jowiz как решение

Решение

Например:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <Windows.h>
#include <cstdio>
 
 
 
int main()
{
    for (;;)
    {
        GUITHREADINFO ti;
        ti.cbSize = sizeof (ti);
 
        if (GetGUIThreadInfo(0, &ti))
        {
            DWORD const ThreadId = GetWindowThreadProcessId(ti.hwndFocus, NULL);
 
            if (ThreadId)
            {
                HKL const Layout = GetKeyboardLayout(ThreadId);
 
                if ((HKL)0x04090409 == Layout)
                {
                    printf("English\r\n");
                }
                else if ((HKL)0x04190419 == Layout)
                {
                    printf("Russian\r\n");
                }
            }
        }
 
        Sleep(1000);
    }
 
    return EXIT_SUCCESS;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2017, 17:27
Помогаю со студенческими работами здесь

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure TForm1.Button1Click(Sender: TObject); begin ...

Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново?
Занялся сабжем по проекту. IDE Builder 2010 1) Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле...

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

Переключение раскладки
Здравствуйте. Уровень пользования ПК - домохозяйка. Около десяти лет сижу под ОС Ubuntu и счастлив. Устроился на новую работу, там стоит...

Переключения раскладки.?
Сегодня установил Windows 10 и сразу первый вопрос. Сколько не искал, так и не нашёл, где можно поменять сочетание клавиш для переключения...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru