0

WM_MSO_BROADCASTCHANGE 的值是多少,下次我将如何为自己弄清楚呢?

4

2 回答 2

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);    
        }        
    }
于 2011-06-20T05:17:13.087 回答
0

在大多数情况下,我会说使用 Google 或 MSDN。WM_TIMER在 MSDN 上搜索发现这是 #1 答案:

http://msdn.microsoft.com/en-us/library/ms644902(VS.85).aspx

所以我们有:

#define WM_TIMER                        0x0113

在您的情况下,在 Google 上搜索该字符串只会显示两个匹配项,它们显示不同的值 - 所以我想不出要告诉您什么。这是在第三方库中,其文档或代码会告诉您价值吗?它必须在某个地方的头文件中定义,如果它是正确的,或者没有人可以在他们的代码中使用它。话又说回来,也许隐藏价值是意图。这是插件使用的一些仅限内部的 Windows 消息吗?

于 2010-11-05T11:03:04.177 回答