代码之家  ›  专栏  ›  技术社区  ›  Josh

wm_mso_broadchange值

  •  0
  • Josh  · 技术社区  · 14 年前

    wm-mso-usoadcastchange的价值是什么?下一次我该如何计算?

    2 回复  |  直到 8 年前
        1
  •  2
  •   kmote Funkpotamus    8 年前

    我知道答案很晚,但碰巧我最近自己在找这个问题的答案,所以这可能有助于其他跑腿的谷歌人…

    原来“wm-mso-usoadchange”没有设定值。通过调用 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);    
            }        
        }
    
        2
  •  0
  •   Steve Townsend    14 年前

    在大多数情况下,我会说使用谷歌或msdn。寻找 WM_TIMER 在msdn上,这是1答案:

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

    所以我们有:

    #define WM_TIMER                        0x0113
    

    在你的例子中,在谷歌上搜索这个字符串只会发现两个匹配项,显示不同的值——所以我想不出该告诉你什么。是否在第三方库中,其文档或代码会告诉您值?它必须在头文件的某个地方定义,如果它是正确的,或者没有人可以在他们的代码中使用它。再说一次,也许隐藏价值就是意图。这是加载项使用的仅限内部的Windows消息吗?

    推荐文章