Frage

Was ist der Wert für WM_MSO_BROADCASTCHANGE, und wie würde ich es heraus nächstes Mal für mich aus?

War es hilfreich?

Lösung

Eine späte Antwort, ich weiß, aber wie ich es vor kurzem für die Antwort der Suche wurde geschieht auf diese Frage selbst, so dass diese anderen helfen kann verirrten Googler ...

Es stellte sich heraus, dass „WM_MSO_BROADCASTCHANGE“ keinen festen Wert hat. Sie erhalten einen Wert für sie dynamisch durch RegisterMessage aufrufen. Siehe http://msdn.microsoft.com/en -US / library / ms644947 (v = VS.85) aspx

Beachten Sie, dass in diesem speziellen Fall MS Office erscheint die Nachricht zu senden, so dass nur andere Fenster der obersten Ebene wird es erhalten.

In der Regel können Sie ein Tool wie Spy ++ verwenden (die mit Visual Studio und wahrscheinlich die Windows-Plattform SDKs auch), um zu sehen, was der Wert einer Nachricht ist. In diesem Fall wird auch Spy ++ einzuloggen, dass es sich um eine registrierte Nachricht ist.

Um es hören Sie vielleicht einige C # -Code schreiben, zum Beispiel, dass sieht wie folgt aus.

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);    
        }        
    }

Andere Tipps

In den meisten Fällen würde ich Google oder MSDN sagen. Die Suche nach WM_TIMER auf MSDN taucht diese als die Nummer 1 Antwort:

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

und so haben wir:

#define WM_TIMER                        0x0113

In Ihrem Fall eine Suche nach dieser Zeichenfolge auf Google nur zwei Spiele auftaucht, die zeigen, differierende Werte - so dass ich nicht denken kann, was Sie sagen. Ist das in einem Dritt Bibliothek, deren Dokumentation oder Code würden Sie den Wert sagen? Es muss in einer Header-Datei irgendwo definiert werden, ob es richtig ist, oder niemand sie in ihrem Code verwenden kann. Dann wieder, vielleicht den Wert versteckt ist die Absicht. Ist das eine nur den internen Windows-Nachricht von einem Addin verwendet?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top