wm_mso_broadcastchange値
-
29-09-2019 - |
質問
wm_mso_broadcastchangeの価値は何ですか?次回は自分でそれをどのように把握しますか?
解決
遅い答え、私は知っていますが、それが起こると、私は最近この質問への答えを自分で探していましたので、これは他の誤ったグーグル人に役立つかもしれません...
「wm_mso_broadcastchange」には設定値がないことがわかりました。呼び出して動的に値を取得します RegisterMessage
. 。見る http://msdn.microsoft.com/en-us/library/ms644947(v=vs.85).aspx
この特定のケースでは、MS Officeがメッセージをブロードキャストするように見えるため、他のトップレベルのウィンドウのみが受信することに注意してください。
一般に、Spy ++などのツール(Visual StudioとおそらくWindows Platform 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);
}
}
他のヒント
ほとんどの場合、GoogleまたはMSDNを使用すると言います。探している WM_TIMER
MSDNでは、これを#1の答えとして表示します。
http://msdn.microsoft.com/en-us/library/ms644902(vs.85).aspx
そして、私たちは持っています:
#define WM_TIMER 0x0113
あなたの場合、Googleでその文字列を検索すると、値が異なることを示しています。これは、ドキュメントまたはコードがあなたに値を伝えるサードパーティのライブラリにありますか?それが正しい場合、またはコードで誰もそれを使用することができない場合、どこかにヘッダーファイルで定義する必要があります。再び、おそらく価値を隠すことが意図です。これは、addinによって使用される内部のみのWindowsメッセージですか?