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

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

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;}
}

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


多台显示器信息

相关文章:

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

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(…...

基于频分复用导频的MMSE信道估计方法设计与仿真

基于频分复用导频的MMSE信道估计方法设计与仿真 摘要 本文详细研究了基于频分复用(FDM)导频的最小均方误差(MMSE)信道估计方法。首先介绍了无线通信系统中信道估计的基本原理和重要性,然后深入分析了频分复用导频结构的设计和MMSE估计算法的理论基础。我们使用Python实现了完…...

低代码开发模式下的应用交付效率优化:拖拽式交互机制研究

低代码开发平台凭借其可视化操作、快速构建、灵活扩展等核心特性&#xff0c;正在成为推动企业数字化转型的重要工具。 拖拽式开发&#xff0c;降低技术门槛 &#xff1a;图形化界面与模块化组件&#xff0c;用户无需编写复杂代码&#xff0c;只需通过简单的拖拽即可完成应用搭…...

STP配置

由于我们演示的是STP 但是华为交换机默认的都是MSTP所以要换到STP以下是方法 STP mode &#xff1f; 查看模式 STP mode stp 选择stp 换好了后配置交换机优先级 [SWA]stp priority 4096 Apr 15 2013 16:15:33-08:00 SWA DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5…...

Linux操作系统 使用共享内存实现进程通信和同步

共享内存使用 //main.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <sys/shm.h> #include <string.h> int main() {int shmidshmget((key_t)1234,256,IPC_CREAT|0600);assert(shmid!-1);…...

如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)

方法一&#xff1a;对列表的获取进行分页处理 实现方法&#xff1a; 前端请求&#xff08;需要向后端传两个参数&#xff0c;pageIndex是获取第几页是从0开始&#xff0c;pageSize是这一页需要获取多少个数据&#xff09; 后端接口实现&#xff08;因为这里是通过参数拼接请求…...

尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?

一&#xff1a;mateX6 国际版支持鸿蒙吗&#xff1f; 不支持 二&#xff1a;华为国际版支持鸿蒙吗&#xff1f; 不支持 三&#xff1a;华为国际版什么时候支持&#xff1f; 2025年预期可以支持。请耐心等待。 三&#xff1a;国际版为什么不支持&#xff1f; EMUI 采用AO…...

《 PyTorch 2.3革新:torch.compile自动生成CUDA优化内核全解》

CUDA作为NVIDIA推出的并行计算平台和编程模型&#xff0c;为GPU计算提供了强大的支持&#xff0c;但手动优化CUDA代码不仅需要深厚的专业知识&#xff0c;而且过程繁琐、耗时费力&#xff0c;torch.compile的出现&#xff0c;犹如一道曙光&#xff0c;为解决这一困境带来了全新…...

OpenCV中的分水岭算法 (C/C++)

OpenCV中的分水岭算法 (C/C) &#x1f3de;️ 分水岭算法 (Watershed Algorithm) 是一种在图像处理和计算机视觉中广泛应用的图像分割方法。它特别适用于分离图像中相互接触或重叠的对象。其基本思想是将灰度图像看作一个地形景观&#xff0c;其中灰度值代表海拔高度。算法模拟…...

Kafka 客户端连接机制的一个典型陷阱

这是 Kafka 客户端连接机制的一个典型陷阱&#xff0c;你遇到的现象可以通过 Kafka bootstrap server 的连接策略和 broker 的 advertised.listeners 配置来精确解释。 &#x1f3af; 问题描述简化 ✅ 使用顺序为&#xff1a; 192.168.22.22:9092,192.168.22.23:9092,172.21.16…...

相机--RGB相机

教程 RGB--深度相机--激光雷达 RGB相机 原理&#xff1a; 仅捕获红&#xff08;R&#xff09;、绿&#xff08;G&#xff09;、蓝&#xff08;B&#xff09;三通道的彩色图像&#xff0c;输出2D像素矩阵&#xff0c;无深度信息。 核心作用&#xff1a; 2D视觉任务&#xff1…...

足球数据全解析:实时数据到高阶数据

一、实时数据 1.基础&#xff1a; 比分 & 时间&#xff1a;最基础也最容易出错&#xff0c;优秀的实时数据源&#xff0c;比分更新时间小于0.5秒 射门/射正&#xff1a;狂射20脚进攻猛&#xff1f;可能是"无效狂轰" 射正3次进2球效率逆天 控球率&#xff1a…...

[科研实践] VS Code (Copilot) + Overleaf (使用 Overleaf Workshop 插件)

科研圈写文档常用 Latex 环境&#xff0c;尤其是 Overleaf 它自带的 AI 润色工具 Writefull 太难用了。如果能用本地的 CoPilot / Cursor 结合 Overleaf&#xff0c;那肯定超高效&#xff01; 于是我们找到了 VS Code 里的 Overleaf Workshop 插件。这里已经安装好了&#xff0…...

人工智能100问☞第36问:什么是BERT?

目录 一、通俗解释 二、专业解析 三、权威参考 BERT是基于Transformer Encoder的双向语言预训练模型,具备强大的语义理解能力,是现代自然语言处理的重要基石。它是一套让机器像人一样“前后一起看”的语言理解技术,它让AI不光“读得快”,还“读得懂”。现在很多搜索引擎…...

从0开始学习R语言--Day12--泊松分布

今天我们来看一个很经典的回归模型&#xff1a;泊松分布。 泊松分布 我们一般会把泊松分布用于预测问题&#xff0c;比如想知道成年人每天接到的骚扰电话次数&#xff0c;医院每天的急诊病人等。但在一些方面&#xff0c;跟我们想的会有出入。例如你不能将其应用在预测下周你的…...

工控机安装lubuntu系统

工控机安装lubuntu系统指南手册 1. 准备 1个8G左右的U盘 下载Rufus&#xff1a; Index of /downloads 下载lubuntu系统镜像&#xff1a; NJU Mirror Downloads – Lubuntu 下载Ventoy工具&#xff1a; Releases ventoy/Ventoy GitHub 下载后&#xff0c;解压&#…...

视频监控汇聚平台EasyCVR安防小知识:如何通过视频融合平台解决信息孤岛问题?

一、项目背景与需求分析​ 随着数字化技术发展与网络带宽升级&#xff0c;视频技术应用场景不断拓展&#xff0c;视频监控、记录仪等多样化产品构建起庞大体系。但这些独立系统彼此割裂&#xff0c;形成信息孤岛。 在系统集成项目中&#xff0c;视频系统深度融合已成必然趋势…...

在大型中实施访问控制 语言模型

大家读完觉得有帮助记得关注&#xff01;&#xff01;&#xff01; 抽象 在企业设置中&#xff0c;组织数据是隔离的、孤立的 并受到精心设计的访问控制框架的精心保护。 如果 LLM 对 siloed data serve 请求进行微调&#xff0c;用于下游任务&#xff0c; 来自具有不同访问权限…...

Haption在危险、挑战性或受限环境中操作的情况提供了一种创新的遥操作解决方案

Haption Virtuose 6D TAO是一款拥有7个主动自由度的触觉设备&#xff0c;专为虚拟现实环境交互而设计。 它与Virtuose的一系列软件解决方案兼容&#xff0c;可让您直接在CAD软件中使用该设备进行装配仿真&#xff0c;并在3D游戏引擎中使用该设备&#xff0c;从而打造更加逼真的…...

html中使用nginx ssi插入html

1.使用方法 nginx配置&#xff1a; server {listen 80;server_name example.com;location / {root /var/www/html;index index.html;ssi on; # 开启 SSI 功能ssi_types text/html; # 指定哪些类型的文件启用 SSI&#xff0c;默认只有 text/html} }html内容&#xff1a; &l…...

行为型:状态模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的&#xff1a;将状态相关逻辑封装到独立的类中&#xff0c;消除复杂的条件分支&#xff0c;状态的切换由具体状态类自身管理 举例&#xff1a; 1>…...

优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草·卓伊凡

优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草卓伊凡 一、项目概述 甲方需求&#xff1a;为现有Discuz X3.5系统集成电子签约功能&#xff0c;对接e签宝API&#xff0c;实现用户发起/签署合同、模板管理、签约记录查询等功能。 总预算&#xff1a;9,3…...

人工智能在智能金融中的创新应用与未来趋势

随着金融科技的快速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正在深刻改变金融服务的各个方面。从风险评估到投资决策&#xff0c;从客户服务到欺诈检测&#xff0c;AI的应用不仅提高了金融服务的效率和准确性&#xff0c;还为用户带来了更加个性化和便捷的体验…...

LeetCode:贪心算法

目录 一、分发饼干 二、摆动序列 三、最大子数组和 四、买卖股票的最佳时机II 五、跳跃游戏 六、跳跃游戏II 七、K次取反后最大化的数组和 八、加油站 九、分发糖果 十、柠檬水找零 十一、根据身高重建队列 十二、用最少数量的箭引爆气球 十三、无重叠区间 十四、…...

基于本地化大模型的智能编程助手全栈实践:从模型部署到IDE深度集成学习心得

近年来&#xff0c;随着ChatGPT、Copilot等AI编程工具的爆发式增长&#xff0c;开发者生产力获得了前所未有的提升。然而&#xff0c;云服务的延迟、隐私顾虑及API调用成本促使我探索一种更自主可控的方案&#xff1a;基于开源大模型构建本地化智能编程助手。本文将分享我构建本…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.8 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.8 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 (a) dataframe<-data.frame( Lightc(580,568…...

引领机器人交互未来!MANUS数据手套解锁精准手部追踪

MANUS数据手套为机器人技术带来高精度手部追踪&#xff0c;助力实现人与机器的自然交互&#xff01;近年&#xff0c;越来越多客户希望利用这项技术精准操控机械臂、灵巧手和人形机器人&#xff0c;不断提升设备的智能化水平和交互体验。 MANUS数据手套是高精度人机交互设备&am…...

HarmonyNext使用request.agent.download实现断点下载

filedownlaod(API12) &#x1f4da;简介 filedownload 这是一款支持大文件断点下载的开源插件&#xff0c;退出应用程序进程杀掉以后或无网络情况下恢复网络后&#xff0c;可以在上次位置继续恢复下载等 版本更新—请查看更新日志!!! 修复已知bug,demo已经更新 &#x1f4d…...

《重塑认知:Django MVT架构的多维剖析与实践》

MVT&#xff0c;即Model - View - Template&#xff0c;是Django框架独特的架构模式。它看似简单的三个字母&#xff0c;实则蕴含着深刻的设计哲学&#xff0c;如同古老智慧的密码&#xff0c;解开了Web应用开发的复杂谜题。 模型&#xff0c;是MVT架构中的数据核心&#xff0…...

JS入门——三种输入方式

JS入门——三种输入方式 一、方式一&#xff1a;直接在警告框弹出(window可以省略) <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script><!-- 方式一直接在警告框弹…...