上一篇博客《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# 获取当前屏幕的宽高和位置的更多相关文章

  1. DOM中获取宽高、位置总结

    原生JS 一.文档.窗口的宽高和位置 // 获取屏幕的宽高 window.screen.height | window.screen.width // 屏幕可用工作区宽高 window.screen. ...

  2. 【图像处理】Golang 获取JPG图像的宽高

    一.背景 有些业务需要判断图片的宽高,来做一些图片相关缩放,旋转等基础操作. 但是图片缩放,旋转,拼接等操作需要将图片从 JPG 格式转成 RGBA 格式操作,操作完毕后,再转回 JPG 图片. 那如 ...

  3. JavaScript中的各种宽高以及位置总结

    JavaScript中的各种宽高以及位置总结 在javascript中操作dom节点让其运动的时候,常常会涉及到各种宽高以及位置坐标等概念,如果不能很好地理解这些属性所代表的意义,就不能理解js的运动 ...

  4. LODOP中的各种宽高和位置简短问答

    LODOP中的位置边距,可查看本博客另一篇相关博文:LODOOP中的各种边距 打印项.整体偏移.可打区域.内部边距关于LODOP中的各种宽高,可查看本博文简短问答下方的正文:.该文其实有两个以前的相关 ...

  5. 获取img的真实宽高

    之前项目后台上传图片时需要对图片的宽高做限制,一开始百度了之后使用js进行判断,可是这种方式存在一定问题,后来就改在后台判断了.现在吧这两种方式都贴出来. 一.用js获取: 先说第一个方法:obj.s ...

  6. js 获取页面可视区域宽高

    获取浏览器窗口的可视区域高度和宽度,滚动条高度有需要的朋友可参考一下. 1.IE中,浏览器显示窗口大小只能以下获取: 代码如下复制代码 代码如下 document.body.offsetWidth d ...

  7. js获取精确的元素宽高(普通获取高度会有误差)

    当js获取元素宽高时, 并不是一个精确的数字,如果想获取真正的宽高大致方法如下 var oStyle = obj.currentStyle ? obj.currentStyle : window.ge ...

  8. Android在onCreate中获取控件的宽高

    在某些需求下,我们需要在onCreate的时候就获取到控件的宽高,但是如果直接用view.getWidth()或view.getHeight()会得到0.这是因为在onCreate执行的时候,控件还没 ...

  9. activity 中获取控件的宽高

    1.第一种方式: TextView textview3 = findViewById(R.id.textview3); textView3.post(new Runnable() { @Overrid ...

随机推荐

  1. linux和windows共享目录

    常用的samba共享 1.安装samba:可以先检查下是否已经安装:rpm -qa | grep samba,没安装直接yum,安装命令:yum install samba 2.创建共享文件夹 mkd ...

  2. Gigabyte Z170N-WIFI 黑苹果 10.12

    简述 (此文在我的个人博客长期更新)[http://aiellochan.com/2018/02/11/play/Gigabyte-Z170N-WIFI-%E9%BB%91%E8%8B%B9%E6%9 ...

  3. @ResponseBody 返回乱码 的解决办法

    1:最快的  最简单的办法是  在Ajax请求脸面指定头信息Accept属性,StringHttpMessageConverter默认iso-8859-1编码,但是会根据请求头信息指定的编码格式来转换 ...

  4. 装mongondb数据库

    装mongondb数据库装好以后进入c盘mongondb bin里边 复制地址 将其放入环境变量里边 放之前需要往前边加一个英语的;在 d盘 建一个data文档 里边简历一个db文件夹 cmd命令框输 ...

  5. [转] An Introduction to Mutual SSL Authentication

    1. Introduction Mutual SSL authentication or certificate based mutual authentication refers to two p ...

  6. Icehouse 创建Instance代码分析

    1. nova-api接收到request 在/etc/nova/api-paste.ini中,是这样配置nova v2的 [app:osapi_compute_app_v2] paste.app_f ...

  7. map put值 使用匿名函数

    List<Map<String, Object>> list = setRoleMenuRlMapper.selectMapByParams(params); // Map m ...

  8. Java 判断两个对象是否相等

    一.使用 == 与 equals == : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) equals() ...

  9. Javascript高级编程学习笔记(50)—— DOM2和DOM3(2)样式

    样式 在HTML中定义元素的方式有以下三种: 1.link标签引入外部样式表 2.style标签定义嵌入样式 3.通过JS中对style特性定义元素样式(行内样式) “DOM2级样式”围绕上述样式机制 ...

  10. 移动端点击事件300ms延迟问题解决方案——fastclick.js

    移动端点击事件300ms延迟的问题由来已久,如下截图 下面截图来自原文:https://www.jianshu.com/p/6e2b68a93c88 网上关于300ms延迟问题的解决方法,大致分为 3 ...