WM_MSO_BROADCASTCHANGE值

WM_MSO_BROADCASTCHANGE的价值是什么,下一次如何解决?

我知道一个迟到的答案,但是最近我正在自己寻找这个问题的答案,所以这可能会帮助其他错误的Google员工…

原来,“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); } } 

在大多数情况下,我会说使用谷歌或MSDN。 在MSDN上搜索WM_TIMER就成了#1的答案:

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

所以我们有:

 #define WM_TIMER 0x0113 

就你而言,在Google上搜索该字符串只会出现两个匹配,显示不同的值 – 所以我想不出要告诉你什么。 这是在一个第三方库,其文档或代码会告诉你的价值? 它必须在某个头文件中定义,如果是正确的,或者没有人可以在其代码中使用它。 再一次,也许隐藏价值就是意图。 这是一个外挂使用的一些只有内部的Windows消息吗?