C#获取Windows10屏幕的缩放比例-C/S开发框架
现在1920x1080以上分辨率的高分屏电脑渐渐普及了。我们会在Windows的显示设置里看到缩放比例的设置。在Windows桌面客户端的开发中,有时会想要精确计算窗口的面积或位置。然而在默认情况下,无论WinForms的Screen.Bounds.Width属性还是WPF中SystemParameters.PrimaryScreenWidth属性,以下图举例,将会返回除以150%的数值1280。而不是真实的物理分辨率1920。 接下来介绍如何获取Display resolution中显示的实际分辨率。通过如下Win32 API的调用: [DllImport("gdi32.dll", EntryPoint = "GetDeviceCaps", SetLastError = true)] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex); 该方法可以获取设备的硬件信息,可以通过第二个参数nIndex来指定要查询的具体信息。例如我们要用到的以像素为单位的桌面高度DESKTOPVERTRES。 enum DeviceCap { VERTRES = 10, PHYSICALWIDTH = 110, SCALINGFACTORX = 114, DESKTOPVERTRES = 117, // http://pinvoke.net/default.aspx/gdi32/GetDeviceCaps.html } 在获得物理像素高度后,通过计算不难得出屏幕的缩放比列。 private static double GetScreenScalingFactor() { var g = Graphics.FromHwnd(IntPtr.Zero); IntPtr desktop = g.GetHdc(); var physicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES); var screenScalingFactor = (double)physicalScreenHeight / Screen.PrimaryScreen.Bounds.Height; //SystemParameters.PrimaryScreenHeight; return screenScalingFactor; } 在获取屏幕缩放比例后,诸如通过Graphics类的CopyFromScreen方法来截屏,或者精确控制窗口大小和位置才得以正确实现。 <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application> 该设置对WPF无效,WPF默认支持DPI感知功能。而从UWP开始Windows客户端技术全面支持高分屏即高DPI缩放。老旧应用程序不肯升级,以至无法支持高分屏,这锅某软背着挺冤的…… How to get Windows display scale using C#. (github.com)
参考文档:
Visual Studio 2019 (C#/.NET)安装教程-C/S开发框架 C# DevExpress.XtraCharts获取调色板系统默认颜色-C/S开发框架 C#使用SqlBulkCopy快速导入Excel文件(xls/xlsx)-C/S开发框架 C# FastReport.NET批量打印条形码报表详解教程-C/S开发框架 C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)-C/S开发框架 C# FormTool.SetCursor设置光标为等待状态,提高用户体验-C/S开发框架 C# Combox组件动态下拉数据-C/S开发框架 C#DataTable(转List /JSON/字典 互转)-C/S开发框架 C#.NET其他程序集访问Internal类-C/S开发框架 C#读取加载XML文件-C/S开发框架 C#使用Newtonsoft.Json.dll解析Json数据-C/S开发框架 C#.NET理解Task和async await原理-C/S开发框架 理解C#.NET泛型运作原理-C/S开发框架 C#使用PInvoke.Kernel32加载非托管DLL嵌入资源-C/S开发框架 C# OOP编程 模拟做早餐探索同步异步机制-C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |