首页 > 解决方案 > C# Windows 窗体如何清空所有其他监视器

问题描述

我正在为共享环境构建一个登录表单。每当用户登录并要求提供凭据(通过 RDP)时,此表单都会自动弹出。

我发现了一个问题,如果用户有多个监视器,他们可以通过任务栏上的任务视图按钮访问任务计划程序来禁用表单弹出。(目前,如果用户使用任何热键导航方法,它将注销用户)

所以我想让我的表单在所有其他显示器上显示一个空白屏幕,这样用户就被迫处理登录表单。

我找到了 System.Windows.Forms.Screen.AllScreens 数组,但我不确定如何在每个监视器上绘制一个矩形,除了表单实际所在的位置。

任何帮助将不胜感激。

标签: c#windowsformsmultiple-monitors

解决方案


我想通了,所以我想我会分享。

我创建了一个新的空白表单(称为monitorBlackOut),将其设置为手动定位并最大化。在主窗体中,我添加了以下代码:

if (System.Windows.Forms.Screen.AllScreens.Length > 1)
        {
            for (int i = 1; i < System.Windows.Forms.Screen.AllScreens.Length; i++)
            {
                int xPos = System.Windows.Forms.Screen.AllScreens[i].Bounds.Location.X;
                int yPos = System.Windows.Forms.Screen.AllScreens[i].Bounds.Location.Y;

                monitorBlackOut screen = new monitorBlackOut();
                screen.Location = new Point(xPos, yPos);
                screen.Show();
                screens.Add(screen);
            }
        }

然后当用户成功登录时,我可以执行:

foreach(monitorBlackOut screen in screens)
      screen.Close();

完全按照其应有的方式工作,并且可以在任意数量的显示器上工作。


推荐阅读