System.Windows.Forms.Screen
类// 获取当前主屏幕分辨率int screenWidth = Screen.PrimaryScreen.Bounds.Width;int screenHeight = Screen.PrimaryScreen.Bounds.Height;// 获取指定屏幕分辨率Screen secondaryScreen = Screen.AllScreens[1];int secondaryScreenWidth = secondaryScreen.Bounds.Width;int secondaryScreenHeight = secondaryScreen.Bounds.Height;
System.Windows.SystemParameters
类// 获取当前主屏幕分辨率double screenWidth = SystemParameters.PrimaryScreenWidth;double screenHeight = SystemParameters.PrimaryScreenHeight;// 获取所有屏幕的分辨率double virtualScreenWidth = SystemParameters.VirtualScreenWidth;double virtualScreenHeight = SystemParameters.VirtualScreenHeight;
虚拟屏幕是指所有物理屏幕组合成的逻辑屏幕,可以用于跨越多个物理屏幕显示应用程序。
这两个方法都可以在正常情况下获取到屏幕的分辨率 - 当桌面缩放比例不是 100% 的时候获取到的分辨率就是“真实”的分辨率了,而是按缩放比例调整以后屏幕显示的内容的宽度和高度。
(资料图片)
一开始写了个只获取 DPI 缩放比例的,然后自己手动乘一下,但是调用System.Windows.Interop
的时候在同事电脑上找不到这个命名空间,不知道什么原因,后来找到了一篇类似功能的文章,微调了一下:
using System;using System.Drawing;using System.Runtime.InteropServices;namespace ScreenDPIHelper{ public class ScreenDPIHelper { #region Win32 API [DllImport("user32.dll")] static extern IntPtr GetDC(IntPtr ptr); [DllImport("gdi32.dll")] static extern int GetDeviceCaps( IntPtr hdc, // handle to DC int nIndex // index of capability ); [DllImport("user32.dll", EntryPoint = "ReleaseDC")] static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc); #endregion #region DeviceCaps - 设备属性 常量 const int HORZRES = 8; const int VERTRES = 10; const int LOGPIXELSX = 88; const int LOGPIXELSY = 90; const int DESKTOPVERTRES = 117; const int DESKTOPHORZRES = 118; #endregion #region 属性 // 获取屏幕分辨率当前物理大小 public static Size WorkingArea { get { IntPtr hdc = GetDC(IntPtr.Zero); Size size = new Size(); size.Width = GetDeviceCaps(hdc, HORZRES); size.Height = GetDeviceCaps(hdc, VERTRES); ReleaseDC(IntPtr.Zero, hdc); return size; } } // 当前系统DPI_X 大小 一般为96 public static int DpiX { get { IntPtr hdc = GetDC(IntPtr.Zero); int DpiX = GetDeviceCaps(hdc, LOGPIXELSX); ReleaseDC(IntPtr.Zero, hdc); return DpiX; } } // 当前系统DPI_Y 大小 一般为96 public static int DpiY { get { IntPtr hdc = GetDC(IntPtr.Zero); int DpiX = GetDeviceCaps(hdc, LOGPIXELSY); ReleaseDC(IntPtr.Zero, hdc); return DpiX; } } // 获取真实设置的桌面分辨率大小 public static Size DesktopResolution { get { IntPtr hdc = GetDC(IntPtr.Zero); Size size = new Size(); size.Width = GetDeviceCaps(hdc, DESKTOPHORZRES); size.Height = GetDeviceCaps(hdc, DESKTOPVERTRES); ReleaseDC(IntPtr.Zero, hdc); return size; } } // 获取宽度缩放百分比 public static float ScaleX { get { IntPtr hdc = GetDC(IntPtr.Zero); float ScaleX = (float)GetDeviceCaps(hdc, DESKTOPHORZRES) / (float)GetDeviceCaps(hdc, HORZRES); ReleaseDC(IntPtr.Zero, hdc); return ScaleX; } } // 获取高度缩放百分比 public static float ScaleY { get { IntPtr hdc = GetDC(IntPtr.Zero); float ScaleY = (float)(float)GetDeviceCaps(hdc, DESKTOPVERTRES) / (float)GetDeviceCaps(hdc, VERTRES); ReleaseDC(IntPtr.Zero, hdc); return ScaleY; } } #endregion }}
这个类用到了user32.dll
和gdi32.dll
这两个Win32动态链接库,并调用了其中的函数。如:
GetDC
: 该函数返回指定窗口客户区域或屏幕的设备上下文(DC)。ReleaseDC
: 该函数释放由GetDC
函数获得的指定设备上下文(DC)。GetDeviceCaps
: 该函数检索指定设备的某些功能,如分辨率,颜色深度,打印机输出分辨率等。定义的常量参数分别为:
HORZRES
:水平方向分辨率。VERTRES
:垂直方向分辨率。LOGPIXELSX
:水平方向 DPI。LOGPIXELSY
:垂直方向 DPI。DESKTOPVERTRES
:真实的桌面分辨率的垂直大小。DESKTOPHORZRES
:真实的桌面分辨率的水平大小。参数的值是对应参数在 Win32 API 中的索引。
可获取的参数分别是:
WorkingArea
:获取屏幕分辨率的物理大小,也就是去掉任务栏等占据屏幕空间后的大小。DpiX
:获取当前系统水平方向的 DPI ,DPI 是一个表示每英寸点数的度量单位,通常为 96。DpiY
:获取当前系统垂直方向的 DPI 。DESKTOP
:获取真实的桌面分辨率大小,包括任务栏等占据空间的部分。ScaleX
:获取宽度的缩放比例,即当前屏幕的实际宽度与标准宽度(DESKTOPHORZRES)的比值。ScaleY
:获取高度的缩放比例,即当前屏幕的实际高度与标准高度(DESKTOPVERTRES)的比值。参考文档:
平台调用示例
用平台调用封送数据
标识 DLL 中的函数
C# API 获取系统DPI缩放倍数跟分辨率大小
上一篇:2024内蒙古公务员面试每日一练模拟题及参考答案04.26
下一篇:最后一页
在桌面缩放比例不是100%下的真实桌面分辨率获取方案
佛山新闻网讯佛山日报记者宋佳雨报道:4月25日,在收听收看全国安全防范工作视频会议后,副市长黄少文主持
【一季度知名私募调仓路线图:冯柳新进亿联网络但斌买了AI概念股】从行业来看,百亿私募重仓股主要集中在四
4月24日,在孟加拉国达卡,孟加拉国新总统穆罕默德·谢哈布丁·楚普(左)出席就职仪式。孟加拉国新总统...
国联证券04月26日发布研报称,给予博济医药(300404 SZ,最新价:9 06元)买入评级。评级理由主要包括:1)
Golang 中的通道是一种高效、安全、灵活的并发机制,用于在并发环境下实现数据的同步和传递。本文主要介绍
一、题文阅读小抄写员 叙利奥是小学五年级的学生,十二岁,是个黑头发、皮肤白净的男孩子。他的父亲是铁
女子在出租屋昏迷,大腿根部有血!得立马剖开肚子!
(周建琳唐晓雯)25日,国内智能制造、智能检测领域的重要企业荣旗工业科技(苏州)股份有限公司(以下简称“荣
合金弹头觉醒模拟器推荐使用MuMu模拟器,MuMu模拟器的优化适配做得比较好,即使是中低配电脑也可以流畅运行
1、①可以先打开CAD工程图纸或者是打开CAD也行②在空白处单击鼠标右键,弹出快捷对话框,点击“选项”③...
“共和国的脊梁——科学大师名校宣传工程”西安交通大学原创话剧《追忆西迁年华——向西而歌》https: ...
俄罗斯央行3月抛售3 1吨黄金,仍为全球第五大储备国!
1、找一个不用的纸杯(家庭用来喝水、或者奶茶等杯子都行)把纸杯的上缘用剪刀减去,要剪整齐,在由杯体上
《上古卷轴OL》一款大型多人在线角色扮演游戏,游戏中的雕文,有很多的属性,有些是增加玩家的生命上限,有
橘子洲观光车票仅限当日预约入园用户购买吗?答:是的,橘子洲观光车票仅限当日预约入园用户购买,是没有办
纯电动汽车内卷还没结束,充电桩的内卷就已经开始了!
一、常州中华恐龙园五一门票价格恐龙园票价恐龙园2日无限畅游成人¥318恐龙园2日无限畅游优惠票¥210五一假
医保卡余额怎么转给家人?医保共济账户怎么建立?社保网小编带你来了解一下。医保的个人账户余额并不能转移
东方集团收证监局警示函4亿至6亿元回购仅实施100万---中国经济网北京4月25日讯证监会黑龙江监管局网站近日
以下是深桑达A在北京时间4月10日10:07分盘口异动快照:4月10日,深桑达A盘中快速上涨,5分钟内涨幅超过2%
点击查看>>>2023年新田县中小学教师资格认定公告
春风伴读这所幼儿园把阅读搬进大自然---让孩子爱上阅读,有时候需要一点自然的加持。在“自然和乐天性养...
4月25日,荣耀新机荣耀X50i正式首销。该机搭载了一亿像素主摄,薄至7 48mm,轻至179g,配备6 7英寸超窄边全
为深入贯彻省、市、县推动专业镇高质量发展的战略部署,全面优化法治化营商环境,用法治护航祁县玻璃器皿高
X 关闭
X 关闭