0

WM_MSO_BROADCASTCHANGE の値は何ですか? また、次回はどのようにそれを判断するのでしょうか?

4

2 に答える 2

2

遅い答え、私は知っていますが、たまたま私は最近この質問への答えを自分で探していたので、これは他の間違ったGoogle社員に役立つかもしれません...

「WM_MSO_BROADCASTCHANGE」には値が設定されていないことがわかりました。を呼び出して、動的に値を取得しますRegisterMessagehttp://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 を使用すると思います。MSDN で を検索するとWM_TIMER、これが一番の答えになります。

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

したがって、次のようになります。

#define WM_TIMER                        0x0113

あなたの場合、Google でその文字列を検索すると、異なる値を示す 2 つの一致のみが表示されるため、何を伝えればよいかわかりません。これは、そのドキュメントまたはコードが値を教えてくれるサードパーティのライブラリにありますか? それが正しい場合は、どこかのヘッダーファイルで定義する必要があります。そうしないと、誰もコードで使用できません。繰り返しになりますが、おそらく値を非表示にすることが意図されています。これは、アドインによって使用される内部専用の Windows メッセージですか?

于 2010-11-05T11:03:04.177 に答える