不窃取焦点的显示表单在一段时间后停止工作

本文关键字:一段时间 停止工作 表单 显示 焦点 | 更新日期: 2023-09-27 18:05:12

我创建了自己的具有特殊功能的屏幕键盘。我使用override方法ShowWithoutActivationCreateParams来防止我的表单获得焦点(根据这个stackoverflow问题)。

    protected override bool ShowWithoutActivation
    {
        get { return true; }
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams param = base.CreateParams;
            param.ExStyle |= 0x08000000;
            return param;
        }
    }

但经过几个Hide()Show()我的形式再次聚焦。要修复它,我需要重新启动应用程序,但这当然是糟糕的解决方案。可以不重启吗?隐藏后显示形式而不给它焦点没有帮助。我的应用程序可以再次集中。

我注意到,在大多数情况下它是随机发生的,但在其中一个总是:如果我显示我的应用程序后右键单击托盘中的NotifyIcon,并从ContextMenuStrip中选择项目。OnClick I simple call show function

不窃取焦点的显示表单在一段时间后停止工作

需要点击窗口吗?如果没有,试试这个:

   protected override void WndProc(ref Message message)
   {
       switch (message.Msg)
       {
           case 0x84: // WM_NCHITTEST
               message.Result = (IntPtr)(-1); // HTTRANSPARENT;
               return;
       }
       base.WndProc(ref message);
       return;
   }