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 提供,也可能随 Windows 平台 SDK 提供)来查看消息的值是什么。在这种情况下,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 消息吗?