-
Отлавливаю сообщения WM_CHAR в активном окне. Как поймал нужный символ изменяю его код на код другой буквы, не английской, но вывести ее не удается. Как изменить параметры WM_CHAR, чтобы отправить окну код буквы в Unicode? Через отладчик заметил, что если, допустим, я меняю код символа на 123, то до окна доходит лишь байт, то есть 23.
-
WM_UNICHAR ?
-
> anwe (01.07.08 08:38)
> Отлавливаю сообщения WM_CHAR в активном окне. Как поймал > нужный символ изменяю его код на код другой буквы, не английской, > но вывести ее не удается.
Ошибка в 17 строке.
> Как изменить параметры WM_CHAR, чтобы отправить окну код > буквы в Unicode?
Он и так в UTF-16, если словлен WM_CHAR.
> меняю код символа на 123, то до окна доходит лишь байт, > то есть 23
123 - это тоже байт.
-- Regards, LVT.
-
> WM_UNICHAR ?А почему та справка, что прилагается к пакету Deplhi (6), это сообщение не знает? Подсказали, что его номер = $109, но Олли такое сообщение не отлавливает, да и моя ловушка тоже. Что касается > Ошибка в 17 строке.так это не верно. Нет, я знаю, что означает такой ответ, но в коде все верно, ведь с английскими буквами работает. А 123 я имел ввиду $123. Думал это понятно, но признаю - это моя ошибка и имею ли я ввиду десятичную или шестнадцатиричную систему никому не известно. Но по сути. Если изменить: Msg(Pointer(lParam)^).wParam: = $123 то до приложения доходит $23. Как сделать чтобы приложение получило код символа размером в слово???
-
> anwe (01.07.08 20:50) [3]
> но в коде все верно, ведь с английскими буквами работает.
Да-да, "но вывести ее не удается".
> Msg(Pointer(lParam)^).wParam: = $123 //код символа $123
В чем сакральный оного символа?
Если окно не юникодное, то из четырех байт wParam будет использован только один - ASCII character codes.
> Как сделать чтобы приложение получило код символа размером > в слово???
Неверная постановка. См. выше.
-- Regards, LVT,
-
> Как сделать чтобы приложение получило код символа размером > в слово?
Цитата из станд.справки:
If applications process virtual-key messages for some other purpose, they should not call TranslateMessage
-
> Сергей М. © (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.
-
> Приложение-то чужое
Почем мне знать, чужое оно или свое ?
Автор об этом сказать не соизволил)
-
> Leonid Troyanovsky © (01.07.08 23:06) [4]
> В чем сакральный оного символа?
Выпал смысл, sorry.
-- Regards, LVT.
-
> Сергей М. © (01.07.08 23:33) [7]
> Автор об этом сказать не соизволил)
WH_GETMESSAGE .. в активном окне.
-- Regards, LVT.
-
> Автору же надо сосредоточиться на постановке задачи
Эт точно)
А то на сей момент задача выглядит более чем странно: перехват посылки с фасованой репой и подмена содержимого на заморский прямо с грядки корнеплод, в надежде что адресат схавает его вместе с ботвой и не подавится)
-
> WH_GETMESSAGE .. в активном окне
Почему бы не существовать и не быть активным окну своего приложения ?
На аргумент не тянет)
Впрочем, не суть уже как важно.
-
Да, верно подмечено, что WH_GETMESSAGE .. в активном окне, это и значит, что через хук ловлю сообщения в чужом окне.
> Почему бы не существовать и не быть активным окну своего > приложения ?
Так задача такая: если пользователь в любом окне нажал Z - то вставить А с ударением.
-
> нажал Z - то вставить А с ударением
Это для примера, а суть теперь думаю понятна.
-
> в активном окне, это и значит, что через хук ловлю сообщения > в чужом окне
Вовсе не значит. Активным вполне может быть и окно, созданное твоим приложением.
> если пользователь в любом окне нажал Z - то вставить А с > ударением
Куда "вставить"-то ?
-
> Куда "вставить"-то ?
В чужое приложение.
Еще раз с примером: запускаю программу, которую я делаю. Она устанавливает ловушку на WM_CHAR. Открываю, допустим, блокном. Набираю текст латинскими буквами. Как нажал Z вставляется вместо нее А с ударением. А с ударение имеет код $123. Так вот, изменив в wParam структуры MSG код на $123, вижу через отладчик, что до блокнота "доходит" лишь $23, и вставляется символ, соответствующий $23. Теперь, думаю, понятно? Что и как надо сделать, что в данной конкретной ситуации надо сделать, что поменять код символа на $123?
-
> Что и как надо сделать, что в данной конкретной ситуации > надо сделать, что поменять код символа на $123?
В данной конкретной ситуации ничто и никак сделать нельзя, об этом тебе сказано еще в [4] - кодировка в ASCII ограничена одним байтом, а окно блокнота как раз не юникодовое.
-
Может и не юникодовое, но ситуацию я описал выше и больше байта не проходит.
-
> Может и не юникодовое
Ну а раз не-юникодовое, то что же ты тогда хочешь ? Не-юникодовое окно работает только с одним младшим байтом wParam. Выше штанов тут не прыгнешь)
-
А почему когда печатаешь в нем (блокноте) русскими буквами, то посылаются значения от $410 до $44F. Значит штаны шире, чем предполагается?
|