不窃取焦点的显示表单在一段时间后停止工作
本文关键字:一段时间 停止工作 表单 显示 焦点 | 更新日期: 2023-09-27 18:05:12
我创建了自己的具有特殊功能的屏幕键盘。我使用override
方法ShowWithoutActivation
和CreateParams
来防止我的表单获得焦点(根据这个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;
}