-
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]Спасибо большое
-
Пользуясь случаем, можно спрошу: зачем нужна RegisterWindowMessage() ?
Никак не могу понять чем она отличается от простого использования WM_USER+xxx -
Игорь Шевченко © (27.06.16 11:08) [4]
> Пользуясь случаем, можно спрошу: зачем нужна RegisterWindowMessage()
> ?
Затем, что зарегистрированное таким образом сообщение имеет гарантировано уникальный номер. -
Видимо гарантированно другое лишь от других вызовов RegisterWindowMessage()?
-
Игорь Шевченко © (27.06.16 18:40) [6]RegisterWindowMessage созадет атом с указанным именем в таблице атомов и возвращает значение этого атома, выходящее за пределы рекомендуемых к использованию сообщений со значениями 0..$7FFF. Уникальное и одинаковое для одной и той же строки оно будет в текущем сеансе. Конечно, если ты будешь использовать диапазон 0..$FFFF для значений сообщений, то ты имеешь шанс пересечься с таким образом зарегестрированными сообщенями. Но перед таким использованием рекомендуется почитать документацию по Windows.
-
Спасибо за пояснения, но я всё же никак не возьму с толк:
- в каком сценарии следует непременно использовать 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. А какое-то приложение зарезервировало этот номер под свои нужды для форматирования диска. Ты послал сообщение всем, приложение на него среагировало и ты без содержимого диска. -
Теперь понял.
Спасибо Rouse_ и Игорь Шевченко