Значение WM_MSO_BROADCASTCHANGE
Какое значение имеет WM_MSO_BROADCASTCHANGE, и как бы я понял это для себя в следующий раз?
2 ответа
Поздний ответ, я знаю, но так случилось, что я сам недавно искал ответ на этот вопрос, так что это может помочь другим заблудшим гуглерам...
Оказывается, что "WM_MSO_BROADCASTCHANGE" не имеет установленного значения. Вы получаете значение для него динамически, вызывая RegisterMessage
, См. http://msdn.microsoft.com/en-us/library/ms644947(v=vs.85).aspx
Обратите внимание, что в данном конкретном случае MS Office, по-видимому, передает сообщение, поэтому его получают только другие окна верхнего уровня.
В общем, вы можете использовать такой инструмент, как Spy++ (поставляется с Visual Studio и, возможно, также с SDK для платформы Windows), чтобы увидеть значение сообщения. В этом случае Spy ++ также регистрирует, что это зарегистрированное сообщение.
Чтобы его прослушать, вы можете написать, например, код C#, который выглядит следующим образом.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
....
class ThemeChangeCatcherpublic : Form
{
private const string WM_MSO_BROADCAST_NAME = "WM_MSO_BROADCASTCHANGE";
private int WM_MSO_BROADCASTCHANGE = 0;
internal static class NativeMethods
{
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
internal static extern int RegisterWindowMessage(string lpString);
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
WM_MSO_BROADCASTCHANGE = NativeMethods.RegisterWindowMessage(WM_MSO_BROADCAST_NAME);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MSO_BROADCASTCHANGE)
MessageBox.Show("gotcha!");
else
base.WndProc(ref m);
}
}
В большинстве случаев я бы сказал, использовать Google или MSDN. В поисках WM_TIMER
на MSDN это ответ #1:
http://msdn.microsoft.com/en-us/library/ms644902(VS.85).aspx
и так имеем:
#define WM_TIMER 0x0113
В вашем случае, поиск этой строки в Google приводит только к двум совпадениям, которые показывают разные значения - так что я не могу придумать, что вам сказать. Это в сторонней библиотеке, чья документация или код скажет вам значение? Он должен быть определен где-нибудь в заголовочном файле, если он правильный, или никто не может использовать его в своем коде. Опять же, возможно, скрытие значения является намерением. Это какое-то внутреннее Сообщение Windows, используемое надстройкой?