c# - C# Windows 窗体如何清空所有其他监视器
问题描述
我正在为共享环境构建一个登录表单。每当用户登录并要求提供凭据(通过 RDP)时,此表单都会自动弹出。
我发现了一个问题,如果用户有多个监视器,他们可以通过任务栏上的任务视图按钮访问任务计划程序来禁用表单弹出。(目前,如果用户使用任何热键导航方法,它将注销用户)
所以我想让我的表单在所有其他显示器上显示一个空白屏幕,这样用户就被迫处理登录表单。
我找到了 System.Windows.Forms.Screen.AllScreens 数组,但我不确定如何在每个监视器上绘制一个矩形,除了表单实际所在的位置。
任何帮助将不胜感激。
解决方案
我想通了,所以我想我会分享。
我创建了一个新的空白表单(称为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();
完全按照其应有的方式工作,并且可以在任意数量的显示器上工作。
推荐阅读
- asp.net - 如何知道 IIS 为每个工作进程创建了多少线程
- vue.js - 如何在 vue 中绑定“v-model”属性?
- javascript - 在模板中访问“this”
- reactjs - REACT - 在渲染 APP 之前检查身份验证
- apache-spark - RDD的持久性
- html - 在图像中间添加文本而不使其模糊
- vb6 - 是否可以使用 VB6 在面板中迭代地显示数组值
- javascript - react-native-webview this.webView.postMessage 不起作用
- node.js - NodeJS 服务器没有接收到用 redis 发送的 laravel 事件
- laravel - Laravel Horizon 安装在我的本地机器上失败