当前位置: 首页 > news >正文

C# 界面检测显示器移除并在可用显示器上显示

 C#  检测显示器被移除,将界面在当前可用的显示器上显示,避免程序在任务栏点击无响应。

using System;
using System.Linq;
using System.Windows.Forms;public class MonitorWatcher : IDisposable
{private readonly Form _targetForm;private Screen _currentScreen;private bool _disposed = false;public MonitorWatcher(Form form){_targetForm = form ?? throw new ArgumentNullException(nameof(form));_currentScreen = GetCurrentScreen();// 订阅显示器变化事件SystemEvents.DisplaySettingsChanged += OnDisplaySettingsChanged;}private Screen GetCurrentScreen(){if (!_targetForm.IsHandleCreated || _targetForm.WindowState == FormWindowState.Minimized){return Screen.PrimaryScreen;}return Screen.FromHandle(_targetForm.Handle);}private void OnDisplaySettingsChanged(object sender, EventArgs e){// 检查当前显示器是否仍然存在var allScreens = Screen.AllScreens;bool currentScreenExists = allScreens.Any(s => s.DeviceName == _currentScreen.DeviceName);if (!currentScreenExists){// 当前显示器已移除,迁移到其他显示器MoveToAvailableScreen();}// 更新当前显示器信息_currentScreen = GetCurrentScreen();}private void MoveToAvailableScreen(){var availableScreens = Screen.AllScreens;if (availableScreens.Length == 0){return; // 没有可用显示器}// 选择最合适的显示器(优先主显示器)var targetScreen = availableScreens.FirstOrDefault(s => s.Primary) ?? availableScreens[0];// 计算新位置,确保窗口完全可见var newLocation = CalculateNewPosition(_targetForm, targetScreen);// 移动窗口_targetForm.Location = newLocation;// 如果窗口最大化,先恢复再移动再最大化if (_targetForm.WindowState == FormWindowState.Maximized){_targetForm.WindowState = FormWindowState.Normal;_targetForm.Location = newLocation;_targetForm.WindowState = FormWindowState.Maximized;}}private Point CalculateNewPosition(Form form, Screen screen){// 确保窗口完全在目标显示器的工作区域内Rectangle workingArea = screen.WorkingArea;int newX = workingArea.Left;int newY = workingArea.Top;// 如果窗口大小超过工作区,调整大小if (form.Width > workingArea.Width){form.Width = workingArea.Width;}if (form.Height > workingArea.Height){form.Height = workingArea.Height;}return new Point(newX, newY);}public void Dispose(){if (!_disposed){SystemEvents.DisplaySettingsChanged -= OnDisplaySettingsChanged;_disposed = true;}}
}

调用例子方法

using System;
using System.Windows.Forms;public partial class MainForm : Form
{private MonitorWatcher _monitorWatcher;public MainForm(){InitializeComponent();// 初始化显示器监控_monitorWatcher = new MonitorWatcher(this);// 窗体关闭时释放资源this.FormClosed += (s, e) => _monitorWatcher.Dispose();}
}

如果遇到没有定义的类,使用右键“快速操作和重构...” vs会弹出解决方法,选择弹出的解决方式。


文章转载自:

http://tkD6d75S.dwdjj.cn
http://b6Mm7C9F.dwdjj.cn
http://0wTayq14.dwdjj.cn
http://isd2Gikq.dwdjj.cn
http://35xu217v.dwdjj.cn
http://DWm4SDOR.dwdjj.cn
http://enkpN5vq.dwdjj.cn
http://dXrlGvIz.dwdjj.cn
http://UATU4yiH.dwdjj.cn
http://4sWJZVzs.dwdjj.cn
http://eydkcWLp.dwdjj.cn
http://0JUUvEi8.dwdjj.cn
http://SfFd6E6i.dwdjj.cn
http://Nq0OKT3a.dwdjj.cn
http://z32HdFUv.dwdjj.cn
http://e26JAg58.dwdjj.cn
http://1WBcv9dI.dwdjj.cn
http://11XpFp7S.dwdjj.cn
http://wRNWrKwe.dwdjj.cn
http://7qjyqVaL.dwdjj.cn
http://92lOkUzr.dwdjj.cn
http://br1KTRcb.dwdjj.cn
http://hU5m5NMn.dwdjj.cn
http://4CZwxGJs.dwdjj.cn
http://1gthGKfO.dwdjj.cn
http://tkDngO6b.dwdjj.cn
http://1k5iZvQu.dwdjj.cn
http://ypyxxXmn.dwdjj.cn
http://7Tj6syS8.dwdjj.cn
http://Cc6KzcMd.dwdjj.cn
http://www.dtcms.com/a/246209.html

相关文章:

  • 图像处理 | 基于matlab的多尺度Retinex(MSR)和自适应直方图均衡化(CLAHE)算法联合的低照度图像增强(附代码)
  • NGINX 四层 SSL/TLS 支持ngx_stream_ssl_module
  • Parasoft C++Test软件集成测试(部件测试)_实例讲解
  • python在容器内克隆拉取git私有仓库
  • 【ffmpeg】将多段ts视频片段合成一个mp4
  • java操作word里的表格
  • python3如何使用QT编写基础的对话框程序
  • 智能合约的浪潮:从区块链到业务自动化的 IT 新引擎
  • tcping工具使用指南
  • 中天互联在工业软件方面有哪些产品
  • QEMU源码全解析 —— 块设备虚拟化(27)
  • c/c++ 汇编码中的.cfi 指令有什么用途?
  • Python Docker 镜像构建完整指南:从基础到优化
  • Python实现web请求与访问
  • el-select+el-tree实现树形下拉选择
  • WebDebugX和多工具组合的移动端调试流程构建:一个混合App项目的实践案例
  • ref 应用于对象类型的一个案例
  • webgl(three.js 与 cesium 等实例应用)之浏览器渲染应用及内存释放的关联与应用
  • go-carbon v2.6.8 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
  • 在 Flutter 项目中iOS 的 App 图标和 App 名称 的设置
  • Spring依赖注入的四种方式(面)
  • 集装箱残损识别系统如何检测残损?它的识别率能达到多少?
  • MySQL 索引学习笔记
  • OpenCV CUDA模块图像变形------对图像进行下采样操作函数pyrDown()
  • 基于Node.js的线上教学系统的设计与实现(源码+论文+调试+安装+售后)
  • Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型时序预测对比
  • LSTM助力迁移学习!深度学习架构性能提升,准确率达到99.91%!
  • 【无标题】六边形铺砖拓扑模型的深度解析:从几何结构到量子优势
  • 【机器学习】Teacher-Student框架
  • 使用freemarker模板 生成 word文档