WM_MSO_BROADCASTCHANGE の値は何ですか? また、次回はどのようにそれを判断するのでしょうか?
2 に答える
遅い答え、私は知っていますが、たまたま私は最近この質問への答えを自分で探していたので、これは他の間違ったGoogle社員に役立つかもしれません...
「WM_MSO_BROADCASTCHANGE」には値が設定されていないことがわかりました。を呼び出して、動的に値を取得しますRegisterMessage
。http://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);
}
}
ほとんどの場合、Google または MSDN を使用すると思います。MSDN で を検索するとWM_TIMER
、これが一番の答えになります。
http://msdn.microsoft.com/en-us/library/ms644902(VS.85).aspx
したがって、次のようになります。
#define WM_TIMER 0x0113
あなたの場合、Google でその文字列を検索すると、異なる値を示す 2 つの一致のみが表示されるため、何を伝えればよいかわかりません。これは、そのドキュメントまたはコードが値を教えてくれるサードパーティのライブラリにありますか? それが正しい場合は、どこかのヘッダーファイルで定義する必要があります。そうしないと、誰もコードで使用できません。繰り返しになりますが、おそらく値を非表示にすることが意図されています。これは、アドインによって使用される内部専用の Windows メッセージですか?