Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка WM_CHAR в WH_GETMESSAGE [D6, WinXP]


Страницы:   1 2

anwe ©   (2008-07-01 08:38:00) 

Отлавливаю сообщения WM_CHARв активном окне. Как поймал нужный символ изменяю его код на код другой буквы, не английской, но вывести ее не удается. Как изменить параметры WM_CHAR, чтобы отправить окну код буквы в Unicode?
Через отладчик заметил, что если, допустим, я меняю код символа на 123, то до окна доходит лишь байт, то есть 23.


anwe   (2008-07-02 13:40:00) [21]

А почему когда печатаешь в нем (блокноте) русскими буквами, то посылаются значения от $410 до $44F. Значит штаны шире, чем предполагается?


Сергей М.   (2008-07-02 13:37:00) [22]


> Может и не юникодовое


Ну а раз не-юникодовое, то что же ты тогда хочешь ?
Не-юникодовое окно работает только с одним младшим байтом wParam.
Выше штанов тут не прыгнешь)


anwe   (2008-07-02 13:29:00) [23]

Может и не юникодовое, но ситуацию я описал выше и больше байта не проходит.


Сергей М.   (2008-07-02 13:01:00) [24]


> Что и как надо сделать, что в данной конкретной ситуации
> надо сделать, что поменять код символа на $123?


В данной конкретной ситуации ничто и никак сделать нельзя, об этом тебе сказано еще в [4] - кодировка в ASCII ограничена однимбайтом, а окно блокнота как раз не юникодовое.


anwe   (2008-07-02 12:08:00) [25]


> Куда "вставить"-то ?

В чужое приложение.

Еще раз с примером: запускаю программу, которую я делаю. Она устанавливает ловушку на WM_CHAR. Открываю, допустим, блокном. Набираю текст латинскими буквами. Как нажал Z вставляется вместо нее А с ударением.
А с ударение имеет код $123. Так вот, изменив в wParam структуры MSG код на $123, вижу через отладчик, что до блокнота "доходит" лишь $23, и вставляется символ, соответствующий $23.
Теперь, думаю, понятно?
Что и как надо сделать, что в данной конкретной ситуации надо сделать, что поменять код символа на $123?


Сергей М.   (2008-07-02 09:21:00) [26]


> в активном окне, это и значит, что через хук ловлю сообщения
> в чужом окне


Вовсе не значит.
Активным вполне может быть и окно, созданное твоим приложением.


> если пользователь в любом окне нажал Z - то вставить А с
> ударением


Куда "вставить"-то ?


anwe   (2008-07-02 09:06:00) [27]


> нажал Z - то вставить А с ударением

Это для примера, а суть теперь думаю понятна.


anwe   (2008-07-02 09:04:00) [28]

Да, верно подмечено, что WH_GETMESSAGE .. в активном окне, это и значит, что через хук ловлю сообщения в чужом окне.

> Почему бы не существовать и не быть активным окну своего
> приложения ?

Так задача такая: если пользователь в любом окне нажал Z - то вставить А с ударением.


Сергей М.   (2008-07-01 23:44:00) [29]


> WH_GETMESSAGE .. в активном окне


Почему бы не существовать и не быть активным окну своегоприложения ?

На аргумент не тянет)

Впрочем, не суть уже как важно.


Сергей М.   (2008-07-01 23:42:00) [30]


> Автору же надо сосредоточиться на постановке задачи


Эт точно)

А то на сей момент задача выглядит более чем странно: перехват посылки с фасованой репой и подмена содержимого на заморский прямо с грядки корнеплод, в надежде что адресат схавает его вместе с ботвой и не подавится)


Leonid Troyanovsky   (2008-07-01 23:37:00) [31]


> Сергей М. ©   (01.07.08 23:33) [7]

> Автор об этом сказать не соизволил)

WH_GETMESSAGE .. в активном окне.

--
Regards, LVT.


Leonid Troyanovsky   (2008-07-01 23:35:00) [32]


> Leonid Troyanovsky ©   (01.07.08 23:06) [4]

> В чем сакральный оного символа?

Выпал смысл, sorry.

--
Regards, LVT.


Сергей М.   (2008-07-01 23:33:00) [33]


> Приложение-то чужое


Почем мне знать, чужое оно или свое ?

Автор об этом сказать не соизволил)


Leonid Troyanovsky   (2008-07-01 23:27:00) [34]


> Сергей М. ©   (01.07.08 23:07) [5]

> If applications process virtual-key messages for some other
> purpose, they should not call TranslateMessage

Приложение-то чужое, и оно его вызывает.
(Откуда б взялось тогда WM_CHAR)

Автору же надо сосредоточиться на постановке задачи,
а не на поиске источников своих заблуждений.

--
Regards, LVT.


Сергей М.   (2008-07-01 23:07:00) [35]


> Как сделать чтобы приложение получило код символа размером
> в слово?


Цитата из станд.справки:

If applications process virtual-key messages for some other purpose, they should not call TranslateMessage


Leonid Troyanovsky   (2008-07-01 23:06:00) [36]


> anwe   (01.07.08 20:50) [3]

>  но в коде все верно, ведь с английскими буквами работает.

Да-да, "но вывести ее не удается".

> Msg(Pointer(lParam)^).wParam: = $123 //код символа $123

В чем сакральный оного символа?

Если окно не юникодное, то из четырех байт wParam будет использован
только один - ASCII character codes.

> Как сделать чтобы приложение получило код символа размером
> в слово???

Неверная постановка. См. выше.

--
Regards, LVT,


anwe   (2008-07-01 20:50:00) [37]

> WM_UNICHAR ?

А почему та справка, что прилагается к пакету Deplhi (6), это сообщение не знает? Подсказали, что его номер = $109, но Олли такое сообщение не отлавливает, да и моя ловушка тоже.
Что касается

> Ошибка в 17 строке.

так это не верно. Нет, я знаю, что означает такой ответ, но в коде все верно, ведь с английскими буквами работает. А 123 я имел ввиду $123. Думал это понятно, но признаю - это моя ошибка и имею ли я ввиду десятичную или шестнадцатиричную систему никому не известно.
Но по сути. Если изменить:
Msg(Pointer(lParam)^).wParam: = $123 //код символа $123
то до приложения доходит $23.
Как сделать чтобы приложение получило код символа размером в слово???


Leonid Troyanovsky   (2008-07-01 11:07:00) [38]


> anwe   (01.07.08 08:38)  

> Отлавливаю сообщения WM_CHAR в активном окне. Как поймал
> нужный символ изменяю его код на код другой буквы, не английской,
>  но вывести ее не удается.

Ошибка в 17 строке.

> Как изменить параметры WM_CHAR, чтобы отправить окну код
> буквы в Unicode?

Он и так в UTF-16, если словлен WM_CHAR.

> меняю код символа на 123, то до окна доходит лишь байт,
> то есть 23

123 - это тоже байт.

--
Regards, LVT.


clickmaker   (2008-07-01 10:05:00) [39]

WM_UNICHAR ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо