Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перехват сообщения WM_CHAR - как заставить печататсья два символа?

3.7K
17 ноября 2006 года
Techtor
43 / / 12.09.2004
Я прехватывыю сообщение WM_CHAR и мне необходимо, чтобы приложение печатало два символа при нажатии одной клавиши (не одинаковых - с заданием каждого символа :) ). Как это можно реализовать?
398
17 ноября 2006 года
Alexandoros
630 / / 21.10.2005
Куда печатало? В нулл?
501
21 ноября 2006 года
hell_admin
110 / / 02.10.2004
Действительно куда? А вообще не вижу проблемы печатай вручную.. в чем трабла то?
3.2K
21 ноября 2006 года
Sania
186 / / 28.10.2006
Посылай вдогонку еще одно сообщение. Смотри API.
547
22 ноября 2006 года
Hydra
488 / / 20.06.2006
Как сообщение перехватываешь? Хуком?
3.7K
06 декабря 2006 года
Techtor
43 / / 12.09.2004
Да, хуком ловлю.
3.7K
06 декабря 2006 года
Techtor
43 / / 12.09.2004
Посылать-то сообщение WM_CHAR в доонку я попробовал сразу, но и тут возникла проблема. В некоторых приложениях вместо двух символов печатаетсья три )первый символ повторяетсья два раза), в некоторых - только ворой симво печатаетсья. Логично, что посланное сообщение WM_CHAR перехватываеться хуком и опять обрабатываетсья, но делать код, которых после отсылки сообщения, следующее перехваченое сообщение не обрабатывает оказалось безполезно: в разных приложениях были разные глюки с выводом символов.
547
07 декабря 2006 года
Hydra
488 / / 20.06.2006
Из хука сообщение лучше не посылать. А если и посылать, то PostMessage. А еще лучше завести thread, слать сообщение ему, и уж потом пусть он в порядке очереди свое WM_CHAR шлет.
имхо.
501
07 декабря 2006 года
hell_admin
110 / / 02.10.2004
Передавай в lParam'e флаг что сообщение уже послано из хука и не обрабатывай такие сообщения.
3.7K
08 декабря 2006 года
Techtor
43 / / 12.09.2004
Помогло, но в некоторых приложениях последний символ печатаеться два раза. Проверка lparam'ом не помогла. Мож я че делаю не так:

 
Код:
при отправке сообщения:
    PostMessage(h,message,(WPARAM)'a',(LPARAM)#число#);

при перехвате сообщения:
    if(msg->message == WM_CHAR && msg->lParam != (LPARAM)#число#)


Не помогает, последняя буква два раза печатаеться.
3.7K
11 декабря 2006 года
Techtor
43 / / 12.09.2004
Дальше развиваю тему lparam'a. Написал код, который при перехвате помеченного сообщения мессагу выводит и завершает ф-цию:
 
Код:
if(msg->lParam==(LPARAM)#число#)
    {
        MessageBox(NULL,"Our message",NULL,NULL);
        return 0; //все, дальнейшая обработка не нужна, завершаем функцию
    }

Запускаю прогу. Запускаю блокнот. Жму нужную клавишу. Пишет первый символ в блокнот, выдает мен мою мессагу, пишет второй симбвол. Все работает как надо.
Запускаю WordPad. Жму нужную кнопку. Пишет первую букву, далее мессага, вторая буква, мессага, третья буква(такая-же, как и вторая), третья мессага.
Заккоментировал строчку return 0; в приведенном коде. После третьей буквы теперь выдает две мессаги. Почему при получении сообщения WM_CHAR таким вот способом, окна с форматированым текстом два раза букву пишут? Или скажите ка от этого избавиться. Мож проблему как-то обойти можно...
501
13 декабря 2006 года
hell_admin
110 / / 02.10.2004
Вообще странно как то.. а какую величину в кач-ве lparam'a ты передаешь? Там у него вообще есть стандартные значение которые юзаються самой виндой, их использовать нельзя т.к. у них есть стандартноые назначения, плюс надо их обрабатывать тоже.. т.е. пересылать в таком же виде как и получил.
3.7K
13 декабря 2006 года
Techtor
43 / / 12.09.2004
Пробовал разные значения. Если не ощибаюсь, с 21го идут незарезервированые (несколько штук). Но не в этом суть. Меченое сообщение отлавливалось и не обрабатывалось, но символ дополнительный печатался. Такое ощущение, что Ворд и ему подобные при отсылке им одного WM_CHAR печатают два символа.
501
13 декабря 2006 года
hell_admin
110 / / 02.10.2004
Посмотри Spy++ какие сообщения получает приложение и c какими параметрами... и сколько раз и сделай логи внутри перехвата с какими параметрами ты что посылаешь и получаешь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог