上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕的DPI设置html
本章主要介绍如何获取当前窗口所在屏幕的信息编程
若是当前是单屏幕,能够直接获取主屏幕post
var primaryScreen = Screen.PrimaryScreen;
若是当前是多屏,建议经过窗口句柄获取Screen信息url
var window = Window.GetWindow(ExportButton);//获取当前主窗口 var intPtr = new WindowInteropHelper(window).Handle;//获取当前窗口的句柄 var screen = Screen.FromHandle(intPtr);//获取当前屏幕
DPI转换比例常量,DpiPercent = 96;spa
为什么DpiPercent为96 ?有一个概念“设备无关单位尺寸”,其大小为1/96英寸。好比:code
【物理单位尺寸】=1/96英寸 * 96dpi = 1像素;htm
【物理单位尺寸】=1/96英寸 * 120dpi = 1.25像素;blog
关于WPF单位和系统DPI,能够参考《WPF编程宝典》中相关章节get
Bounds对应的是屏幕的分辨率,而要经过Bounds.Width获取屏幕的宽度,则须要将其转化为WPF单位的高宽。博客
步骤:
using (Graphics currentGraphics = Graphics.FromHwnd(intPtr)) { double dpiXRatio = currentGraphics.DpiX / DpiPercent; double dpiYRatio = currentGraphics.DpiY / DpiPercent; var width = screen.Bounds.Width / dpiXRatio; var height = screen.Bounds.Height / dpiYRatio; var left = screen.Bounds.Left / dpiXRatio; var top = screen.Bounds.Top / dpiYRatio; }
也能够经过System.Windows.SystemParameters,直接获取主屏幕信息,不过这个类只能获取主屏幕的高宽。
这里的高宽指的是实际高宽。
主屏幕:
var screenHeight = SystemParameters.PrimaryScreenHeight; var screenWidth = SystemParameters.PrimaryScreenWidth;
多屏时全屏幕:
var primaryScreenHeight = SystemParameters.FullPrimaryScreenHeight; var primaryScreenWidth = SystemParameters.FullPrimaryScreenWidth;
当前工做区域:(除去任务栏的区域)
var workAreaWidth = SystemParameters.WorkArea.Size.Width; var workAreaHeight = SystemParameters.WorkArea.Size.Height;
关键字:WPF单位,屏幕高宽/位置