Кое-что вместо RegisterWindowMessage
От: kero Россия  
Дата: 31.05.05 05:47
Оценка:
Сначала несколько цитат из недавней темы "RegisterWindowMessage и WM_USER"
(http://rsdn.ru/Forum/Message.aspx?mid=1184661&all=1):
Автор: sandrey_
Дата: 22.05.05


> Не могу придумать случая когда необходимо использовать RegisterWindowMessage().

> По-моему ВСЕГДА можно обойтись WM_USER+d. (...) [От: sandrey_ ]
>
> (...) RegisterWindowMessage является единственной альтернативой в таком случае. [От: Alex Fedotov модератор ]
>
> (...) Т.е. приходим к выводу, что RegisterWindowMessage — это наше все. [От: Flamer rsdn ]

А я вот тоже НЕ МОГУ ПРИДУМАТЬ СЛУЧАЯ, КОГДА НЕОБХОДИМО ИСПОЛЬЗОВАТЬ RegisterWindowMessage :-)

Несколько вариантов замены (masm32):

0) invoke RegisterWindowMessage,offset string
mov mess_id,eax

1) invoke RegisterClipboardFormat,offset string
mov mess_id,eax

2) .data?
wcs WNDCLASS <>
.code
mov wcs.lpszClassName,offset string
invoke RegisterClass,offset wcs
and eax,0ffffh
mov mess_id,eax

Ведь эти ф-ции, кажется, играют на одном поле.

(Причем в случае RegisterClass — после закрытия общавшихся прог ID сообщения в диапазоне C000-FFFF не сохраняется.
Кстати, этот вариант можно осуществить прямо в WinMain, совмещая строки ClassName и MyUniqueMessage).

Вот примеры (+ исходники на masm32):

http://www.geocities.com/xmemor/2lz/regrange.zip (обзор диапазона C000-FFFF, 2 кб)
http://www.geocities.com/xmemor/2lz/framerector.zip (RegisterClipboardFormat, 11 кб)
http://www.geocities.com/xmemor/2lz/winfinderposter.zip (RegisterClass, 8 кб)

http://www.geocities.com/xmemor/2lz/tinyasm.html)

P.S. Не знаю, как удалить свой ответ из темы "RegisterWindowMessage и WM_USER"... :-(
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: Кое-что вместо RegisterWindowMessage
От: Ed.ward Россия  
Дата: 31.05.05 07:19
Оценка:
Здравствуйте, kero, Вы писали:

K>Сначала несколько цитат из недавней темы "RegisterWindowMessage и WM_USER"

K>(http://rsdn.ru/Forum/Message.aspx?mid=1184661&amp;all=1):
Автор: sandrey_
Дата: 22.05.05


>> Не могу придумать случая когда необходимо использовать RegisterWindowMessage().

>> По-моему ВСЕГДА можно обойтись WM_USER+d. (...) [От: sandrey_ ]
>>
>> (...) RegisterWindowMessage является единственной альтернативой в таком случае. [От: Alex Fedotov модератор ]
>>
>> (...) Т.е. приходим к выводу, что RegisterWindowMessage — это наше все. [От: Flamer rsdn ]

K>А я вот тоже НЕ МОГУ ПРИДУМАТЬ СЛУЧАЯ, КОГДА НЕОБХОДИМО ИСПОЛЬЗОВАТЬ RegisterWindowMessage



пример
http://www.rsdn.ru/Forum/Message.aspx?mid=307611&amp;only=1
Автор: Ed.ward
Дата: 25.06.03


Ed.ward
Re[2]: Кое-что вместо RegisterWindowMessage
От: kero Россия  
Дата: 31.05.05 10:27
Оценка:
2 Ed.ward

> пример

> http://rsdn.ru/Forum/Message.aspx?mid=307611&amp;only=1
Автор: Ed.ward
Дата: 25.06.03

> Ed.ward

Cпасибо за ответ. Cходил по предложенному указателю, и нашел там вот что:

>> И как же отловить сообщение TaskbarCreate?

>
> Зарегетрировать это сообщение вот таким макаром
> const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("TaskbarCreated"));
> и обрабатывать его
> Ed.ward

Простите, — это пример чего ?

Начать с того, что данное сообщение уже зарегистрировано системой,
и таким макаром система просто возвращает его идентификатор.

Но об том и речь, что можно получить его и другими макарами (см. выше)...
что юзер (не система) может регистрировать свои сообщения не единственным способом...
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: Кое-что вместо RegisterWindowMessage
От: Кодёнок  
Дата: 31.05.05 10:34
Оценка:
K>(Причем в случае RegisterClass — после закрытия общавшихся прог ID сообщения в диапазоне C000-FFFF не сохраняется.
K>Кстати, этот вариант можно осуществить прямо в WinMain, совмещая строки ClassName и MyUniqueMessage).

Возможно, все они работают через GlobalAddAtom (см. MSDN).
Re[2]: Кое-что вместо RegisterWindowMessage
От: kero Россия  
Дата: 31.05.05 20:07
Оценка:
2 Кодёнок

>> (Причем в случае RegisterClass — после закрытия общавшихся прог ID сообщения в диапазоне C000-FFFF не сохраняется.

>> Кстати, этот вариант можно осуществить прямо в WinMain, совмещая строки ClassName и MyUniqueMessage).
>
> Возможно, все они работают через GlobalAddAtom (см. MSDN).

Да нет, явно иной механизм: если заглянуть в получаемый через GetClipboardFormatName текущий список строк
с идентификаторами в диапазоне C000-FFFF, то увидим там сообщения, имена форматов, имена классов окон
запущенных приложений... а вот строк, связанных с глобальными атомами, что-то не видать.

Но вопрос в другом:
возможна ли такая ситуация, когда не сработает замена RegisterWindowMessage на RegisterClipboardFormat ?
Или же RegisterWindowMessage — по сути избыточное API ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[3]: Кое-что вместо RegisterWindowMessage
От: Кодёнок  
Дата: 01.06.05 06:08
Оценка:
K>Но вопрос в другом:
K>возможна ли такая ситуация, когда не сработает замена RegisterWindowMessage на RegisterClipboardFormat ?
K>Или же RegisterWindowMessage — по сути избыточное API ?

Это вопрос к Microsoft. В этой версии избыточно, в другой могут разделить. Могут наоборот ввести дополнительные (общие) API, через которые эти функции будут работать.

Может и вправду оказаться, что это следствие какого-нибудь неудачного решения, и все участвовавшие в этом программисты MS будут уверены, что разделения никогда не сделают
Re[4]: Кое-что вместо RegisterWindowMessage
От: kero Россия  
Дата: 04.06.05 12:40
Оценка:
>> Но вопрос в другом:
>> возможна ли такая ситуация, когда не сработает замена RegisterWindowMessage на RegisterClipboardFormat ?
>> Или же RegisterWindowMessage — по сути избыточное API ?
>
> Это вопрос к Microsoft. В этой версии избыточно, в другой могут разделить.
> Могут наоборот ввести дополнительные (общие) API, через которые эти функции будут работать.
> Может и вправду оказаться, что это следствие какого-нибудь неудачного решения, и все участвовавшие
> в этом программисты MS будут уверены, что разделения никогда не сделают

Ну, я не такой невозмутимый индеец. Меня, наоборот, очень даже поразило, что сплошь и рядом используемые
RegisterWindowMessage, RegisterClipboardFormat, RegisterClass(Ex) вот уже 10 лет таят такой сюрприз.

Кстати, если взаимозаменяемость RegisterWindowMessage и RegisterClipboardFormat действительно смахивает
на программерский просчет, то в варианте с RegisterClass(Ex) — не отражается ли некий механизм посылки
сообщений классам окон ?

Конечно, искал по теме и на Гугле, и на RSDN, и на MSDN, но смог найти только вот это
(http://rsdn.ru/Forum/Message.aspx?mid=22359&amp;all=1
Автор: Gurulev Dmitry
Дата: 17.01.02
, 2002 год):

> Re: RegisterWindowMessage

>> Интересно, как спай получает информацию из мессаги, зарегистрированной сабжем?
>> В смысле, когда поставишь галочку "Registered", он ведь зараза выводит строку, которая задавалась при регистрации сообщения.
>
> AFAIR, GetClipboardFormatName выдает имя зарегистрированного сообщения по идентификатору. Попробуй. -- Alex Fedotov

Alex, где Вы ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.