Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9

Как грамотно перехватить WM_CHAR

10.10.2017, 11:25. Показов 1033. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем! Пытаюсь перехватить WM_CHAR, все хожу вокруг да около. Получается перехватить только код нажатой клавиши, в не самого символа:

Делаю так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private static IntPtr HookCallback(int msg, IntPtr wParam, IntPtr lParam)
        {
            //var message = (WindowMessage)msg; //- так в образце, но это не правильно. Правильно (WindowMessage)lParam.message
            //var subCode = (WindowMessageParameter)wParam.ToInt32(); //если wParam - IntPtr
 
            
            var purlParamToKB = ((LPKBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(LPKBDLLHOOKSTRUCT)));            
            MessageBox.Show(
                Convert.ToChar(purlParamToKB.vkCode).ToString() + " + "  +
                Convert.ToChar(purlParamToKB.scanCode).ToString());
 
            return CallNextHookEx(hookID, msg, wParam, lParam); //c cyberforum
        }
Сам хук имеет такой вид:
C#
1
SetWindowsHookEx(WH_KEYBOARD_LL, p_to_callBackFunc, GetModuleHandle(curModule.ModuleName), 0);
Объявление структур и констант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private const int WH_KEYBOARD_LL = 13;
        private const int WH_GETMESSAGE = 3;        
        private const int WM_CHAR = 0x0102;
        private const int WM_KEYDOWN = 0x0100;
 
    struct LPKBDLLHOOKSTRUCT
    {
        public int vkCode;
        public int scanCode;
        public int flags;
        public int time;
        public int dwExtraInfo;
    }
Может я использую какую-то неправильную структуру?

И еще как правильно использовать wParam? Он постоянно возвращает 256 или 257, а msg постоянно 0

Добавлено через 15 минут
Он постоянно возвращает 256 или 257 - это типа WM_KEYFIRST = 0x0100 и WM_KEYUP = 0x0101. Но почему не ловит ничего другого, почему не ловит WM_CHAR = 0x0102 ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2017, 11:25
Ответы с готовыми решениями:

Как получить сообщение WM_CHAR в dialog based приложениях?
kak poluchit' soobshenie WM_CHAR v Dialog Based prilojeniyax?

Как получить уникод из WPARAM при обработке сообщения WM_CHAR?
Как получить уникод из WPARAM при обработке сообщения WM_CHAR? Целую строку перекодировать не нужно, нужен именно отдельный символ в...

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2017, 11:25
Помогаю со студенческими работами здесь

Обработка WM_CHAR
Здравствуйте. Реализовываю autocomplete в WinApi(обновление отображаемого содержимого ListBox по мере ввода поисковой фразы в...

... WM_CHAR не реагирует
Ребята помогите почему не получается при нажатии а,ь,с должен реогироват по форуму не мог найти подходяший материал void...

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

WM_KEYDOWN & WM_CHAR
Приветствую . Необходимо получить символ введенный с клавиатуры в любом окне ОС . Делаю хук , отлавливаю событие : int APIENTRY...

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru