我们的程序从WndProc中的第三方应用程序侦听WM_COPYDATA消息。每次收到WM_COPYDATA后,我们收到另一个版本的应用程序后,我们的程序会从用户正在处理的任何应用程序中获得焦点。 当WM_COPYDATA出现时,我尝试忽略WM_ACTIVATE并且什么也不做,但我的应用程序仍然得到了焦点。我确信他们的应用程序激活了我们的应用程序,但他们否认了它。有没有办法阻止我的应用程序成为焦点?
protected override void WndProc(ref Message m)
{
if(m.Msg == WM_ACTIVATE)
return;
if(m.Msg == WM_COPYDATA)
{
// ProcessCopyData(m);
}
base.WndProc(ref m);
}
更新
我在成为活动
之前写了Focused属性和消息值sw.WriteLine( this.Focused+" " + m.ToString());
False msg = 0x1c(WM_ACTIVATEAPP)hwnd = 0x2606d4 wparam = 0x1 lparam = 0x0 result = 0x0 False msg = 0x86(WM_NCACTIVATE)hwnd = 0x2606d4 wparam = 0x0 lparam = 0x0 result = 0x0 False msg = 0x6(WM_ACTIVATE)hwnd = 0x2606d4 wparam = 0x1 lparam = 0x0 result = 0x0
True msg = 0x281(WM_IME_SETCONTEXT)hwnd = 0x2606d4 wparam = 0x1 lparam = 0xffffffffc000000f result = 0x0
这不起作用
if(m.Msg == WM_NCACTIVATE || m.Msg == WM_ACTIVATE || m.Msg == WM_ACTIVATEAPP)
{
m.WParam = (IntPtr)0;
}
可以忽略这些消息吗?