阻止我的应用关注焦点

时间:2015-03-14 13:48:58

标签: .net winforms winapi

我们的程序从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;
}

可以忽略这些消息吗?

0 个答案:

没有答案