Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для Genome
9 / 9 / 4
Регистрация: 22.03.2013
Сообщений: 226

WM_KEYDOWN & WM_CHAR

29.12.2013, 19:55. Показов 3608. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую .
Необходимо получить символ введенный с клавиатуры в любом окне ОС .

Делаю хук , отлавливаю событие :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
        SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)keyHookproc,hInstance,0);
 
 
 
void keyHookproc(int nCode,WPARAM wParam,LPARAM lParam)
    {
        if(nCode == HC_ACTION){
            DWORD vk = ((LPKBDLLHOOKSTRUCT)lParam)->vkCode;
 
                 if(wParam == WM_KEYDOWN)
            {
                switch(vk)
                {
 
                                }
                         }
vk - показывает код всех символов в ASCII ( английских ) , но если я ввожу русские символы , код естественно остается тот же .
Пробовал делать так :
C++
1
2
3
4
5
6
7
                        if(wParam == WM_CHAR)
            {
                switch(vk)
                {
 
                                }
                         }
Символ не отлавливается .

Соответственно необходимо получить символ , при установленной языковой раскладке .
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2013, 19:55
Ответы с готовыми решениями:

wm_char
как в wm_char принять от пользователя сочетание клавиш "ctrl+s"

Обработка сообщения wm_char
Добрый день! Пытаюсь зафиксировать нажатие буквенной клавиши с занесением символа в массив (для последующего вывода), но ничего не...

WM_KEYDOWN
когда программе поступает сообщение WM_KEYDOWN обрабатываю его так HANDLE_MSG(hwnd,WM_KEYDOWN,OnKeydown); дальше есть функция void...

3
Невнимательный
 Аватар для ft4l
3107 / 1284 / 358
Регистрация: 08.02.2013
Сообщений: 7,538
Записей в блоге: 2
30.12.2013, 04:21
Нашёл только способ узнать раскладку для каждого thread'а отдельно.
The GetKeyboardLayout function retrieves the active input locale identifier (formerly called the keyboard layout) for the specified thread. If the idThread parameter is zero, the input locale identifier for the active thread is returned.

Syntax

HKL GetKeyboardLayout( DWORD idThread
);
//всегда казалось что она одна для одного процесса
0
 Аватар для Genome
9 / 9 / 4
Регистрация: 22.03.2013
Сообщений: 226
05.01.2014, 10:26  [ТС]
Ну раскладку я узнаю вот так :

C++
1
2
3
4
5
6
7
8
9
10
11
12
hk = GetKeyboardLayout(0);
        lang = LOWORD(hk);          //раскладка
        devHandle= HIWORD(hk);      //Дескриптор клавиатуры
 
        if     ( lang == 1049 )                                         //Русский
        {
            
        }
        else if( lang == 1033 )                                         //Анлийский
        {
 
        }
0
 Аватар для FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
07.01.2014, 15:11
Может здесь было бы уместнее поставить хук WH_GETMESSAGE, где отлавливать сообщение WM_CHAR.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2014, 15:11
Помогаю со студенческими работами здесь

WM_KEYDOWN
на мсдн написано что функцию вызывать так, case WM_KEYDOWN: switch (wParam) { case VK_UP: // up was pressed...

Не работает WM_KEYDOWN
Помогите плиз. Вот кусок кода в оконной процедуре: ... case WM_KEYDOWN: switch (wParam) { case VK_LEFT: if(MatrLine == 2)...

Не работает WM_KEYDOWN
Здравствуите , понимаю что таких тем много , читал и пробывал но все грустно . И вроде есть HANDLE_MSG(WM_KEYDOWN) как его объявить и...

Не отвечает на wm_keydown
procedure TBoard.WndProc(var msg: TMessage); //Оконная процедура. begin inherited WndProc(msg); case msg.Msg of ...

WM_KEYUP и WM_KEYDOWN
Пожалуйста помогите разобратся с WM_KEYUP и WM_KEYDOWN вчем разница и для чего они нужны, просто мне надо передать сообщение программе с...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru