Конференция "WinAPI" » Обработка WM_CHAR в WH_GETMESSAGE [D6, WinXP]
 
  • anwe (01.07.08 08:38) [0]
    Отлавливаю сообщения WM_CHAR в активном окне. Как поймал нужный символ изменяю его код на код другой буквы, не английской, но вывести ее не удается. Как изменить параметры WM_CHAR, чтобы отправить окну код буквы в Unicode?
    Через отладчик заметил, что если, допустим, я меняю код символа на 123, то до окна доходит лишь байт, то есть 23.
  • clickmaker © (01.07.08 10:05) [1]
    WM_UNICHAR ?
  • Leonid Troyanovsky © (01.07.08 11:07) [2]

    > anwe   (01.07.08 08:38)  

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

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

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

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

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

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

    --
    Regards, LVT.
  • anwe (01.07.08 20:50) [3]
    > WM_UNICHAR ?

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

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

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


    то до приложения доходит $23.
    Как сделать чтобы приложение получило код символа размером в слово???
  • Leonid Troyanovsky © (01.07.08 23:06) [4]

    > anwe   (01.07.08 20:50) [3]

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

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

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

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

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

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

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

    --
    Regards, LVT,
  • Сергей М. © (01.07.08 23:07) [5]

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


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

    If applications process virtual-key messages for some other purpose, they should not call TranslateMessage
  • Leonid Troyanovsky © (01.07.08 23:27) [6]

    > Сергей М. ©   (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.
  • Сергей М. © (01.07.08 23:33) [7]

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


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

    Автор об этом сказать не соизволил)
  • Leonid Troyanovsky © (01.07.08 23:35) [8]

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

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

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

    --
    Regards, LVT.
  • Leonid Troyanovsky © (01.07.08 23:37) [9]

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

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

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

    --
    Regards, LVT.
  • Сергей М. © (01.07.08 23:42) [10]

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


    Эт точно)

    А то на сей момент задача выглядит более чем странно: перехват посылки с фасованой репой и подмена содержимого на заморский прямо с грядки корнеплод, в надежде что адресат схавает его вместе с ботвой и не подавится)
  • Сергей М. © (01.07.08 23:44) [11]

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


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

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

    Впрочем, не суть уже как важно.
  • anwe (02.07.08 09:04) [12]
    Да, верно подмечено, что WH_GETMESSAGE .. в активном окне, это и значит, что через хук ловлю сообщения в чужом окне.

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

    Так задача такая: если пользователь в любом окне нажал Z - то вставить А с ударением.
  • anwe (02.07.08 09:06) [13]

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

    Это для примера, а суть теперь думаю понятна.
  • Сергей М. © (02.07.08 09:21) [14]

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


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


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


    Куда "вставить"-то ?
  • anwe (02.07.08 12:08) [15]

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

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

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

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


    В данной конкретной ситуации ничто и никак сделать нельзя, об этом тебе сказано еще в [4] - кодировка в ASCII ограничена одним байтом, а окно блокнота как раз не юникодовое.
  • anwe (02.07.08 13:29) [17]
    Может и не юникодовое, но ситуацию я описал выше и больше байта не проходит.
  • Сергей М. © (02.07.08 13:37) [18]

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


    Ну а раз не-юникодовое, то что же ты тогда хочешь ?
    Не-юникодовое окно работает только с одним младшим байтом wParam.
    Выше штанов тут не прыгнешь)
  • anwe (02.07.08 13:40) [19]
    А почему когда печатаешь в нем (блокноте) русскими буквами, то посылаются значения от $410 до $44F. Значит штаны шире, чем предполагается?
 
Конференция "WinAPI" » Обработка WM_CHAR в WH_GETMESSAGE [D6, WinXP]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]