при отправке сообщения:
PostMessage(h,message,(WPARAM)'a',(LPARAM)#число#);
при перехвате сообщения:
if(msg->message == WM_CHAR && msg->lParam != (LPARAM)#число#)
Перехват сообщения WM_CHAR - как заставить печататсья два символа?
Я прехватывыю сообщение WM_CHAR и мне необходимо, чтобы приложение печатало два символа при нажатии одной клавиши (не одинаковых - с заданием каждого символа :) ). Как это можно реализовать?
Куда печатало? В нулл?
Действительно куда? А вообще не вижу проблемы печатай вручную.. в чем трабла то?
Посылай вдогонку еще одно сообщение. Смотри API.
Как сообщение перехватываешь? Хуком?
Да, хуком ловлю.
Посылать-то сообщение WM_CHAR в доонку я попробовал сразу, но и тут возникла проблема. В некоторых приложениях вместо двух символов печатаетсья три )первый символ повторяетсья два раза), в некоторых - только ворой симво печатаетсья. Логично, что посланное сообщение WM_CHAR перехватываеться хуком и опять обрабатываетсья, но делать код, которых после отсылки сообщения, следующее перехваченое сообщение не обрабатывает оказалось безполезно: в разных приложениях были разные глюки с выводом символов.
имхо.
Передавай в lParam'e флаг что сообщение уже послано из хука и не обрабатывай такие сообщения.
Код:
Не помогает, последняя буква два раза печатаеться.
Код:
if(msg->lParam==(LPARAM)#число#)
{
MessageBox(NULL,"Our message",NULL,NULL);
return 0; //все, дальнейшая обработка не нужна, завершаем функцию
}
{
MessageBox(NULL,"Our message",NULL,NULL);
return 0; //все, дальнейшая обработка не нужна, завершаем функцию
}
Запускаю прогу. Запускаю блокнот. Жму нужную клавишу. Пишет первый символ в блокнот, выдает мен мою мессагу, пишет второй симбвол. Все работает как надо.
Запускаю WordPad. Жму нужную кнопку. Пишет первую букву, далее мессага, вторая буква, мессага, третья буква(такая-же, как и вторая), третья мессага.
Заккоментировал строчку return 0; в приведенном коде. После третьей буквы теперь выдает две мессаги. Почему при получении сообщения WM_CHAR таким вот способом, окна с форматированым текстом два раза букву пишут? Или скажите ка от этого избавиться. Мож проблему как-то обойти можно...
Вообще странно как то.. а какую величину в кач-ве lparam'a ты передаешь? Там у него вообще есть стандартные значение которые юзаються самой виндой, их использовать нельзя т.к. у них есть стандартноые назначения, плюс надо их обрабатывать тоже.. т.е. пересылать в таком же виде как и получил.
Пробовал разные значения. Если не ощибаюсь, с 21го идут незарезервированые (несколько штук). Но не в этом суть. Меченое сообщение отлавливалось и не обрабатывалось, но символ дополнительный печатался. Такое ощущение, что Ворд и ему подобные при отсылке им одного WM_CHAR печатают два символа.
Посмотри Spy++ какие сообщения получает приложение и c какими параметрами... и сколько раз и сделай логи внутри перехвата с какими параметрами ты что посылаешь и получаешь.