c# 获取电脑 分辨率 及 DPI 设置

article/2025/7/28 1:25:14
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;/// <summary>
/// 这个可以
/// </summary>
class Program
{static void Main(){//设置DPI感知try{SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);}catch{// 旧版Windows回退方案try{SetProcessDPIAware();}catch { }}try{// 获取所有显示器信息var monitors = GetAllMonitors();if (monitors.Count == 0){Console.WriteLine("未检测到显示器");return;}// 创建或覆盖本地txt文件string filePath = @"C:\DisplayInfo.txt";using (StreamWriter writer = new StreamWriter(filePath)){writer.WriteLine("显示器信息报告");writer.WriteLine($"获取时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");writer.WriteLine($"检测到 {monitors.Count} 台显示器");foreach (var monitor in monitors){writer.WriteLine($"显示器名称: {monitor.DeviceName} {(monitor.IsPrimary ? "(主显示器)" : "")}");writer.WriteLine($"分辨率: {monitor.Width} × {monitor.Height}");writer.WriteLine($"DPI缩放百分比: {monitor.DpiScalePercent:F0}%");}}Console.WriteLine($"信息已写入文件:{filePath}");Console.WriteLine("按任意键打开文件...");Console.ReadKey();Process.Start("notepad.exe", filePath);}catch (Exception ex){Console.WriteLine($"发生错误:{ex.Message}");}}//DPI感知声明[DllImport("shcore.dll")]private static extern int SetProcessDpiAwareness(int value);private const int PROCESS_PER_MONITOR_DPI_AWARE = 2;//显示器API声明[StructLayout(LayoutKind.Sequential)]public struct RECT{public int Left;public int Top;public int Right;public int Bottom;}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct MONITORINFOEX{public int Size;public RECT Monitor;public RECT WorkArea;public uint Flags;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]public string DeviceName;}[DllImport("user32.dll")]private static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags);[DllImport("user32.dll", CharSet = CharSet.Auto)]private static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip,MonitorEnumDelegate lpfnEnum, IntPtr dwData);[DllImport("user32.dll", CharSet = CharSet.Auto)]private static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFOEX lpmi);[DllImport("shcore.dll")]private static extern int GetDpiForMonitor(IntPtr hmonitor, int dpiType, out uint dpiX, out uint dpiY);[DllImport("user32.dll")]private static extern IntPtr GetDesktopWindow();[DllImport("user32.dll")]private static extern bool SetProcessDPIAware();private delegate bool MonitorEnumDelegate(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData);// 常量定义private const int MDT_EFFECTIVE_DPI = 0;private const int MONITOR_DEFAULTTOPRIMARY = 1;// 显示器信息类public class DisplayInfo{public string DeviceName { get; set; }public int Width { get; set; }public int Height { get; set; }public double DpiScalePercent { get; set; }public bool IsPrimary { get; set; }}// 获取所有显示器信息的方法private static List<DisplayInfo> GetAllMonitors(){var displayInfos = new List<DisplayInfo>();MonitorEnumDelegate monitorDelegate = (IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData) =>{MONITORINFOEX mi = new MONITORINFOEX();mi.Size = Marshal.SizeOf(mi);if (GetMonitorInfo(hMonitor, ref mi)){uint dpiX = 96, dpiY = 96;bool isPrimary = (mi.Flags & 0x1) != 0;// 使用专用API获取DPIif (GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, out dpiX, out dpiY) != 0){// API失败时使用主显示器DPIIntPtr primaryMonitor = MonitorFromWindow(GetDesktopWindow(), MONITOR_DEFAULTTOPRIMARY);GetDpiForMonitor(primaryMonitor, MDT_EFFECTIVE_DPI, out dpiX, out dpiY);}// 计算DPI百分比 (基于96 DPI为100%)double dpiScalePercent = Math.Round((dpiX / 96.0) * 100, 0);displayInfos.Add(new DisplayInfo{DeviceName = mi.DeviceName.Trim(),Width = mi.Monitor.Right - mi.Monitor.Left,Height = mi.Monitor.Bottom - mi.Monitor.Top,DpiScalePercent = dpiScalePercent,IsPrimary = isPrimary});}return true;};EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, monitorDelegate, IntPtr.Zero);return displayInfos;}
}

新建控制台应用程序执行即可
如下,一台显示器:


多台显示器信息


http://www.hkcw.cn/article/YHUYvUblVg.shtml

相关文章

2025年渗透测试面试题总结-匿名[校招]红队攻防工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]红队攻防工程师 1. 00截断的原理 2. Java回显通用思路及JDK差异 3. Redis利用姿势及环境差异 …

高级数据结构与算法期末考试速成记录

高级数据结构与算法期末考试速成记录 0.分治中的一些知识点 Master公式&#xff08;又称主定理&#xff0c;Master Theorem&#xff09;是一种用于快速求解分治递归算法时间复杂度 的数学工具&#xff0c;适用于递归式形如以下形式的算法&#xff1a; T ( n ) a T ( n b ) …

Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序&#xff0c;目前提供UI for ASP.NET MVC、Kendo…

深入浅出程序设计竞赛(洛谷基础篇) 第十四章 搜索

文章目录 前言例14-1 四阶数独前置知识&#xff1a; 例14-2八皇后例14-3 kkksc03考前临时抱佛脚例14-4 马的遍历前置知识 例14-5 奇怪的电梯例14-6 Meteor Shower S习题14-1.1 选数例14-1 四阶数独前置知识&#xff1a; 例14-2八皇后例14-3 kkksc03考前临时抱佛脚例14-4 马的遍…

图书管理系统的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 图书管理系统的设计与实现 学生姓名 学生学号 所在学院 专业班级 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕业设计(论文)作品是本人在指导教师的指导下,独…

【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤

在Java开发的世界里&#xff0c;选择一个强大的集成开发环境&#xff08;IDE&#xff09;是迈向高效编程的第一步。而IntelliJ IDEA无疑是Java开发者中最受欢迎的选择之一。它以其强大的功能、智能的代码辅助和简洁的用户界面&#xff0c;帮助无数开发者快速构建和部署Java项目…

医疗IT系统绝缘监测及故障定位,绝缘监测技术在医院关键区域的应用

医院作为重要的公共设施&#xff0c;其供配电系统的可靠性和安全性直接关系到患者的生命安全。为确保医院电力系统的稳定&#xff0c;GB/T 16895.24《建筑物电气装置》对医疗场所按用电的安全等级进行了细致的分类&#xff0c;并针对不同的类别推荐相应的电力系统配置。其中&am…

进程间通信及管道(理论)

目录 进程间通信介绍 进程间通信目的 进程间通信发展 进程间通信分类 管道 什么是管道 匿名管道 实例代码 用fork来共享管道原理 管道读写规则 管道特点 命名管道 创建一个命名管道 匿名管道与命名管道的区别 命名管道的打开规则 进程间通信介绍 进程间通信目的 数据传输&#…

如何安全地清洁 Windows10/11PC上的SSD驱动器

“我在 Windows 10 电脑上安装了新的 SSD&#xff0c;我要删除旧的 SSD 驱动器。但我不知道如何清洁电脑上的 SSD 驱动器。我想清除其中的所有内容。” 那么&#xff0c;您想知道如何在 Windows 10/11 PC 上清洁 SSD 驱动器吗&#xff1f;也许您只是想释放宝贵的空间并提高性能…

换ip是换网络的意思吗?怎么换ip地址

在数字化时代&#xff0c;IP地址作为我们在网络世界的"身份证"&#xff0c;其重要性不言而喻。许多人常将"换IP"与"换网络"混为一谈&#xff0c;实际上两者虽有联系却存在本质区别。本文将澄清这一概念误区&#xff0c;并详细介绍多种更换IP地址…

智能化能源管理系统在“双碳”背景下的新价值

安科瑞刘鸿鹏 摘要 2022年已并网的储能项目中,用户侧并网占比为8.36%,其中工商业储能规模为占比为98.6%。随着各省市的峰 谷价差拉大,部分省市可实现两充两放,工商业储能会更 加具有经济性,加上限电政策的影响,工商业储能将在 2023-2025年逐渐发展成主要的增长点&#xff…

带sdf 的post sim 小结

1.SDF文件主要内容 Delays&#xff08;module&#xff0c;device&#xff0c;interconnect&#xff0c;port&#xff09; Timing checks&#xff08;setup&#xff0c;hold&#xff0c;setuphold&#xff0c;recovery&#xff0c;removal&#xff0c;recrem&#xff09; Timing…

《JavaScript高级程序设计》读书笔记 34 - 代理基础

感谢点赞、关注和收藏! 上一篇类,这一篇进入书的第 9 章 - 代理与反射,首先是代理基础。 代理基础 代理是目标对象的抽象。从很多方面看,代理类似 C++指针,因为它可以用作目标对象的替身,但又完全独立于目标对象。目标对象既可以直接被操作,也可以通过代理来操…

《计算机仿真》——引领计算机仿真领域的学术前沿

期刊名称&#xff1a;计算机仿真 (Computer Simulation) 主办单位&#xff1a;中国航天科工集团公司第十七研究所 出版周期&#xff1a;月刊 出版地&#xff1a;北京市 语种&#xff1a;中文 开本&#xff1a;大16开 ISSN&#xff1a;1006-9348 CN&#xff1a;11-3724/TP 邮发代…

java-文件IO

文件IO 操作系统有一个专门的模块-文件系统&#xff0c;来管理文件。并提供了 api 供我们使用。 文件系统 使用 N叉树 来组织文件。 操作系统使用 “路径” 来描述文件的位置。路径的表示又分为 绝对路径 和 相对路径 绝对路径 &#xff1a;从树的的根节点&#xff08;Wind…

数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(上)

1. 数据金字塔的千年进化史 1.1 从地窖到云端的存储革命 某家电企业在2010年遭遇库存危机时&#xff0c;市场部门需要三天才能从纸质单据中统计出全国滞销型号。当他们的数据工程师在2023年轻声唤醒对话式分析机器人&#xff0c;同样的需求响应时间缩短至9秒。 数据分层架构的…

【MySQL】事务及隔离性

目录 一、什么是事务 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;事务的四大属性 &#xff08;三&#xff09;事务的作用 &#xff08;四&#xff09;事务的提交方式 二、事务的启动、回滚与提交 &#xff08;一&#xff09;事务的启动、回滚与提交 &am…

秒出PPT正式改名秒出AI,开启AI赋能新体验!

在现代办公环境中&#xff0c;借助智能工具提升工作效率已经成为趋势。秒出AI作为一款集AI PPT制作、动画、巨幕、视频、设计以及智能简历功能于一体的综合办公平台&#xff0c;为用户提供一站式智能内容生成解决方案&#xff0c;极大地简化了内容创作流程。 1. AI驱动的一键P…

白皮精读:214页数据安全治理白皮书6.0【附全文阅读】

《数据安全治理白皮书6.0》由中关村网络安全与信息化产业联盟数据安全治理专业委员会编著&#xff0c;北京安华金和科技有限公司参与。数据安全治理在数字化时代至关重要&#xff0c;关乎组织的生存与发展、个人信息权益保障以及国家的安全与稳定。这份白皮书围绕数据安全治理展…

工商业储能站能量管理系统

Acrel-2000MG 储能能量管理系统是安科瑞专门针对工商业储能 电站研制的本地化能量管理系统&#xff0c;可实现了储能电站的数据采集、数 据处理、数据存储、数据查询与分析、可视化监控、报警管理、统计 报表、策略管理、历史曲线等功能。其中策略管理&#xff0c;支持多种控制…