Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 阻止我的应用占据焦点_.net_Winforms_Winapi - Fatal编程技术网

.net 阻止我的应用占据焦点

.net 阻止我的应用占据焦点,.net,winforms,winapi,.net,Winforms,Winapi,我们的程序监听来自WndProc中第三方应用程序的WM_COPYDATA消息。在每次接收到WM_COPYDATA时都会收到另一个版本的应用程序之后,我们的程序从用户正在处理的任何应用程序中获取焦点。 当WM_COPYDATA出现时,我试图忽略WM_ACTIVATE,什么也不做,但我的应用程序仍然得到了关注。我肯定他们的申请激活了我们的,但他们拒绝了。有没有办法阻止我的应用程序占据焦点 protected override void WndProc(ref Message m)

我们的程序监听来自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结果=0x0 False msg=0x86(WM_NCACTIVATE)hwnd=0x2606d4 wparam=0x0 lparam=0x0结果=0x0 False msg=0x6(WM_激活)hwnd=0x2606d4 wparam=0x1 lparam=0x0结果=0x0

True msg=0x281(WM\U IME\U SETCONTEXT)hwnd=0x2606d4 wparam=0x1 lparam=0xFFFFFFC000000F结果=0x0

这也没用

if(m.Msg == WM_NCACTIVATE || m.Msg == WM_ACTIVATE || m.Msg == WM_ACTIVATEAPP)
{
    m.WParam = (IntPtr)0;
}

可以忽略这些消息吗?

为什么不在无法集中的专用后台服务上执行侦听?我们的应用程序有用户界面,还可以做其他事情。是的,我理解这一点,我的意思是创建一个专用服务来执行侦听和控制GUI应用程序。这样,中间的服务,你可以过滤掉不需要的消息……为什么WMLCopyDATA会把你的应用程序窗口带到前台,除了你对它进行编码之外,或者把它发送给另一个完全有帮助的应用程序,没有任何理由。对于后一种解释,你显然无法找到原因。简单地隐藏窗口是一种解决方法。“电话也是一样。”我试着把它藏起来,但它仍然能引起注意。我添加了在wm_copydata之后收到的消息