Domanda

Qual è il valore per WM_MSO_BROADCASTCHANGE, e come vorrei capirlo per me la prossima volta?

È stato utile?

Soluzione

Una risposta in ritardo, lo so, ma come accade Recentemente sono stato a cercare la risposta a questa domanda me stesso, quindi questo potrebbe aiutare gli altri erranti Googler ...

Risulta che "WM_MSO_BROADCASTCHANGE" non ha alcun valore impostato. Si ottiene un valore per esso in modo dinamico chiamando RegisterMessage. Vedere http://msdn.microsoft.com/en -us / library / ms644947 (v = vs.85) aspx

Si noti che in questo caso particolare MS Office appare per trasmettere il messaggio, in modo che solo le altre finestre di livello superiore lo riceverà.

In generale, è possibile utilizzare uno strumento come Spy ++ (fornito con Visual Studio e, probabilmente, la piattaforma SDK di Windows troppo) per vedere quale sia il valore di un messaggio è. In questo caso, Spy ++ sarà anche registrare che si tratta di un messaggio registrato.

Per ascoltare per esso si potrebbe scrivere del codice C #, per esempio, che assomiglia a questo.

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

Altri suggerimenti

Nella maggior parte dei casi, direi uso Google o MSDN. Ricerca di WM_TIMER su MSDN salta fuori questo come il # 1 risposta:

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

e così abbiamo:

#define WM_TIMER                        0x0113

Nel tuo caso, una ricerca di quella stringa su Google salta fuori solo due partite, che mostrano valori differenti - quindi non posso pensare a cosa dire. È questo in una libreria di terze parti la cui documentazione o di codice vi direbbe il valore? Esso deve essere definito in un file di intestazione da qualche parte, se è corretto, o nessuno può utilizzarla nel loro codice. Poi di nuovo, forse si nasconde il valore è l'intenzione. È questa una interna solo per Windows Messaggio utilizzato da un componente aggiuntivo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top