Конференция "WinAPI" » Как отловить сообщение
 
  • xteam777 (14.05.16 18:25) [0]
    Используя Spy++ наткнулся на сообщение Registered: "SHELLHOOK". Как его отловить?

    http://savepic.ru/9720936.png
  • Rouse_ © (14.05.16 20:23) [1]
    hMsg := RegisterWindowMessage('SHELLHOOK');

    ...

    procedure XXX.WndProc(var Message: TMessage);
    begin
     if Message.Msg = hMsg then
       ...
  • xteam777 (14.05.16 20:28) [2]
    Спасибо большое
  • KSergey © (26.06.16 11:56) [3]
    Пользуясь случаем, можно спрошу: зачем нужна RegisterWindowMessage() ?
    Никак не могу понять чем она отличается от простого использования WM_USER+xxx
  • Игорь Шевченко © (27.06.16 11:08) [4]

    > Пользуясь случаем, можно спрошу: зачем нужна RegisterWindowMessage()
    > ?


    Затем, что зарегистрированное таким образом сообщение имеет гарантировано уникальный номер.
  • KSergey © (27.06.16 13:35) [5]
    Видимо гарантированно другое лишь от других вызовов RegisterWindowMessage()?
  • Игорь Шевченко © (27.06.16 18:40) [6]
    RegisterWindowMessage созадет атом с указанным именем в таблице атомов и возвращает значение этого атома, выходящее за пределы рекомендуемых к использованию сообщений со значениями 0..$7FFF. Уникальное и одинаковое для одной и той же строки оно будет в текущем сеансе. Конечно, если ты будешь использовать диапазон 0..$FFFF для значений сообщений, то ты имеешь шанс пересечься с таким образом зарегестрированными сообщенями. Но перед таким использованием рекомендуется почитать документацию по Windows.
  • KSergey © (28.06.16 14:51) [7]
    Спасибо за пояснения, но я всё же никак не возьму с толк:
    - в каком сценарии следует непременно использовать RegisterWindowMessage(),
    - а в каком можно смело обойтись WM_USER+1
    ?

    Кстати, про значения, просто чтобы не было опечаток, взято из описания константы WM_USER:

    0 through WM_USER -1             Messages reserved for use by the system.
    WM_USER through 0x7FFF           Integer messages for use by private window classes.
    WM_APP (0x8000) through 0xBFFF   Messages available for use by applications.
    0xC000 through 0xFFFF            String messages for use by applications.
    Greater than 0xFFFF              Reserved by the system.

  • Rouse_ © (28.06.16 14:59) [8]
    SendMessage + HWND_BROADCAST обычно используют в связке с RegisterWindowMessage.
  • Игорь Шевченко © (28.06.16 15:16) [9]

    > - в каком сценарии следует непременно использовать RegisterWindowMessage(),
    >  


    В сценарии обмена между разными, заранее неизвестными приложениями, например.

    Допустим, ты говоришь, давайте все использовать WM_USER+666. А какое-то приложение зарезервировало этот номер под свои нужды для форматирования диска. Ты послал сообщение всем, приложение на него среагировало и ты без содержимого диска.
  • KSergey © (30.06.16 14:23) [10]
    Теперь понял.
    Спасибо Rouse_ и Игорь Шевченко
 
Конференция "WinAPI" » Как отловить сообщение
Есть новые Нет новых   [134427   +35][b:0][p:0.001]