Question

Quelle est la valeur pour WM_MSO_BROADCASTCHANGE, et comment pourrais-je comprendre par moi-même la prochaine fois?

Était-ce utile?

La solution

Une réponse tardive, je sais, mais comme il arrive que je cherchais récemment la réponse à cette question moi-même, si cela peut aider les autres errante ... Googlers

Il s'avère que « WM_MSO_BROADCASTCHANGE » n'a pas de valeur de consigne. Vous obtenez une valeur pour dynamiquement en appelant RegisterMessage. Voir http://msdn.microsoft.com/en -us / bibliothèque / ms644947 (v = vs.85) .aspx

Notez que dans ce cas particulier MS Office semble diffuser le message, de sorte que d'autres fenêtres de niveau supérieur recevront.

En général, vous pouvez utiliser un outil comme Spy ++ (fourni avec Visual Studio et probablement la plate-forme Windows SDKs trop) pour voir ce que la valeur d'un message est. Dans ce cas, Spy ++ enregistre également que c'est un message enregistré.

Pour écouter ce que vous pouvez écrire un code C #, par exemple, qui ressemble à ceci.

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

Autres conseils

Dans la plupart des cas, je dirais utiliser Google ou MSDN. Recherche de WM_TIMER sur MSDN se présente cela comme la réponse n ° 1:

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

et nous avons donc:

#define WM_TIMER                        0x0113

Dans votre cas, une recherche de cette chaîne sur Google se présente seulement deux matchs, qui montrent des valeurs différentes - donc je ne peux pas penser à quoi vous dire. Est-ce dans une bibliothèque tierce dont la documentation ou un code vous dira la valeur? Il doit être défini dans un endroit de fichier d'en-tête, si elle est correcte, ou personne ne peut l'utiliser dans leur code. Là encore, se cachant peut-être la valeur est l'intention. Est-ce une seule interne Message Windows utilisé par un Addin?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top