-
Что за сообщение такое $C0E6?
-
Пользовательское
-
>> 0xC*** is a standard way to define a custom string message. https://msdn.microsoft.com/en-us/library/windows/desktop/ms644931(v=vs.85).aspx >> 0xC000 through 0xFFFF - String messages for use by applications. >> Message numbers in the fourth range (0xC000 through 0xFFFF) are defined at run time when an application calls the RegisterWindowMessage function to retrieve a message number for a string. >> All applications that register the same string can use the associated message number for exchanging messages. >> The actual message number, however, is not a constant and can not be assumed to be the same between different sessions.
-
Гораздо интереснее как Spy++ расшифровывает имена сообщений, в том числе таких...
-
В Delphi раньше WinSight вроде был, а потом убрали. А spy++ только в составе Visual C. Так что шпионов у меня нет. Может бесплатные есть?
-
-
Spy++ да, в составе, но и отдельно скачать вполне можно, сам по себе спай вроде как бесплатен. Хотя вот теперь не уверен))
Просто спай показывает: "Окну пришло сообщение WM_PAINT" - тут как бы ещё ладно, допустим как-то так:
If ( Msg = WM_PAINT ) Then Log.Add( ' Message Received: WM_PAINT ' ); Но вот как он определяет имя когда сообщение пользовательское: "Окну пришло сообщение WM_MY_SUPER_USER_MESSAGE" ??
-
ой... Пока писал уже ответили... Вот оно как! Спасибо огромное!
-
Не-а, GetAtomName() чёта не прокатила, а зато вот эта работает: GetClipboardFormatName()
-
GlobalGetAtomName
-
program EnumAtomsSample;
uses
Windows,
SysUtils;
function GetAtomName(nAtom: TAtom): string;
var n: Integer;
tmpstr: array [0..255] of Char;
begin
n := GlobalGetAtomName(nAtom, PChar(@tmpstr[0]), 256);
if n = 0 then
Result := ''
else
Result := tmpstr;
end;
procedure EnumAtoms;
var i: Integer;
s: string;
begin
for i := MAXINTATOM to MAXWORD do
begin
s := GetAtomName(i);
if (s <> '') then WriteLn(s);
end;
end;
begin
try
EnumAtoms;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
-
-
> [9]
Не-не) Я ж проверял прежде чем писать) И этот код мне где-то Гугл выдавал даже. У меня в таблице три колонки, от нуля до MAXWORD:
* GetAtomName() - всегда пустое (в процессе приложения VCL, что как по мне немного странно, глобальные-то оно создаёт, а локальные совсем нет?). * GlobalGetAtomName() - ожидаемо что-то выдаёт, но не то. Во всяком случае под Win7 и WinXP. * GetClipboardFormatName() - а вот это выдаёт имена сообщений созданных через RegisterWindowMessage().
> Пиратка. Не дружу я с ними ;)
У меня было две версии Студии, сейчас уже нету, но две версии Spy++ и сейчас лежат под рукою, просто как утилиты, лицензий не просят.
-
У себя вот такие сообщения нашёл: * 'TaskbarCreated' * 'TaskbarButtonCreated' * 'WM_ATLGETHOST' * 'WM_ATLGETCONTROL' * 'WM_HTML_GETOBJECT' * 'WM_WINMGR' Местами были ещё какие-то странные, их не привожу.
-
How to list custom messages (RegisterWindowMessage)?
Eduardo A. Morcillo:
> RegisterWindowMessage returns a value in the range &HC000 through &HFFFF. > I remembered other 2 functions that returns values in the same range: AddAtom, RegisterClipboardFormat, > and I thought that, maybe, RegisterWindowMessage uses one of them to register the message. > GetAtomName returns the name of an atom and GetClipboardFormatName returns the name of the clipboard format. > So I just test them. GetAtomName failed, but GetClipboardFormatName returned the correct name.
-
https://groups.google.com/forum/#!topic/microsoft.public.vc.mfc/-D98EsgOSto"For example, registered clipboard formats are stored in an internal atom table used by the system. An application adds atoms to this atom table using the RegisterClipboardFormat function." So this table is not accessible through GlobalGetAtomNAme. But it happens to be shared with registered messages. Actually, it seems that RegisterWindowMessage and RegisterClipboardFormat are the *same* function, or point to the same entry in user32.dll. Maybe all this is undocumented behavior that cannot be relied up for future version of Windows...
|