C# 获取当前屏幕的宽高和位置

摘要:
有一个概念“设备无关单位尺寸”,其大小为1/96英寸。比如:=1/96英寸*96dpi=1像素;=1/96英寸*120dpi=1.25像素;关于WPF单位和系统DPI,可以参考《WPF编程宝典》中相关章节Screen.BoundsBounds对应的是屏幕的分辨率,而要通过Bounds.Width获取屏幕的宽度,则需要将其转化为WPF单位的高宽。这里的高宽指的是实际高宽。

上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕的DPI设置

本章主要介绍如何获取当前窗口所在屏幕的信息

当前屏幕信息

如果当前是单屏幕,可以直接获取主屏幕

    var primaryScreen = Screen.PrimaryScreen;

如果当前是多屏,建议通过窗口句柄获取Screen信息

    var window = Window.GetWindow(ExportButton);//获取当前主窗口
    var intPtr = new WindowInteropHelper(window).Handle;//获取当前窗口的句柄
    var screen = Screen.FromHandle(intPtr);//获取当前屏幕

获取屏幕高宽/位置

DpiPercent

DPI转换比例常量,DpiPercent = 96;

为何DpiPercent为96 ?有一个概念“设备无关单位尺寸”,其大小为1/96英寸。比如:

【物理单位尺寸】=1/96英寸 * 96dpi = 1像素;

【物理单位尺寸】=1/96英寸 * 120dpi = 1.25像素;

关于WPF单位和系统DPI,可以参考《WPF编程宝典》中相关章节

Screen.Bounds

Bounds对应的是屏幕的分辨率,而要通过Bounds.Width获取屏幕的宽度,则需要将其转化为WPF单位的高宽。

步骤:

  1. 获取当前屏幕的物理尺寸(X/Y方向的像素)--如X方向 currentGraphics.DpiX / DpiPercent
  2. 将Screen.Bounds的信息转化为WPF单位信息 --如高度screen.Bounds.Width / dpiXRatio
    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单位,屏幕高宽/位置

免责声明:文章转载自《C# 获取当前屏幕的宽高和位置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇跨域拦截Access-Control-Allow-Origin设置多个origincitrix 云桌面分辨率低下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac下搭建php开发环境【转】

Mac OS X 内置了Apache 和 PHP,这样使用起来非常方便。本文以Mac OS X 10.6.3为例。主要内容包括: 启动Apache 运行PHP 安装MySQL 使用phpMyAdmin 配置PHP的MCrypt扩展库 设置虚拟主机 启动Apache   有两种方法: 打开“系统设置偏好(System Preferences)” ->...

js实现日期显示的一些操作

1、js获取当前日期(yyyy-mm-dd) 以下代码是获取到的当前日期: 1 var myDate = new Date(); 2 var year = myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 var month = myDate.getMonth()+1; //获取当前月...

node.js的iconv模块----在linux上读取windows编码文件

有时候我们在windows上会保存一些中文文字信息文件,然而由于编码集的差异,这文件在linux上显示为乱码,其中一种解决方法是node.js的iconv模块 var fs = require('fs'); var readstream = fs.createReadStream('./新建文本文档.txt'); var str=''; var iconv...

XSS的高级利用部分总结 -蠕虫

XSS的高级利用部分总结 -蠕虫,HTTP-only,AJAX本地文件操作,镜象网页本帖最后由 racle 于 2009-5-30 09:19 编辑 XSS的高级利用总结 -蠕虫,HTTPONLY,AJAX本地文件操作,镜象网页By racle@tian6.com http://bbs.tian6.com/thread-12711-1-1.html转帖请保...

JS字符串拼接优化

//请把以下用于连接字符串的JavaScript代码修改为更高效的方式 var htmlString = ‘ < div class=”container” > ’ + ‘ < ul id=”news-list” >’; for (var i = 0; i < NEWS.length; i++) {   htmlString...

微信分享回调

我在做我们的项目中用到了判断用户是否将文章或者内容通过微信分享出去了,确定用户通过微信分享出去后给用户增加相应的积分。 15年微信修改了策略可以直接调用对应的接口 引入微信接口文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 开始分享代码 WeixinApi.ready(function(Api) {    ...