获取系统DPI、系统显示比例等
1 using System;
2 using System.Drawing;
3 using System.Runtime.InteropServices;
4
5 namespace XYDES
6 {
7 public class PrimaryScreen
8 {
9 #region Win32 API
10 [DllImport("user32.dll")]
11 static extern IntPtr GetDC(IntPtr ptr);
12 [DllImport("gdi32.dll")]
13 static extern int GetDeviceCaps(
14 IntPtr hdc, // handle to DC
15 int nIndex // index of capability
16 );
17 [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
18 static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
19 #endregion
20 #region DeviceCaps常量
21 const int HORZRES = 8;
22 const int VERTRES = 10;
23 const int LOGPIXELSX = 88;
24 const int LOGPIXELSY = 90;
25 const int DESKTOPVERTRES = 117;
26 const int DESKTOPHORZRES = 118;
27 #endregion
28
29 #region 属性
30 /// <summary>
31 /// 获取屏幕分辨率当前物理大小
32 /// </summary>
33 public static Size WorkingArea
34 {
35 get {
36 IntPtr hdc = GetDC(IntPtr.Zero);
37 Size size = new Size();
38 size.Width = GetDeviceCaps(hdc, HORZRES);
39 size.Height = GetDeviceCaps(hdc, VERTRES);
40 ReleaseDC(IntPtr.Zero, hdc);
41 return size;
42 }
43 }
44 /// <summary>
45 /// 当前系统DPI_X 大小 一般为96
46 /// </summary>
47 public static int DpiX
48 {
49 get
50 {
51 IntPtr hdc = GetDC(IntPtr.Zero);
52 int DpiX = GetDeviceCaps(hdc, LOGPIXELSX );
53 ReleaseDC(IntPtr.Zero, hdc);
54 return DpiX;
55 }
56 }
57 /// <summary>
58 /// 当前系统DPI_Y 大小 一般为96
59 /// </summary>
60 public static int DpiY
61 {
62 get
63 {
64 IntPtr hdc = GetDC(IntPtr.Zero);
65 int DpiX = GetDeviceCaps(hdc,LOGPIXELSY);
66 ReleaseDC(IntPtr.Zero, hdc);
67 return DpiX;
68 }
69 }
70 /// <summary>
71 /// 获取真实设置的桌面分辨率大小
72 /// </summary>
73 public static Size DESKTOP
74 {
75 get
76 {
77 IntPtr hdc = GetDC(IntPtr.Zero);
78 Size size = new Size();
79 size.Width = GetDeviceCaps(hdc,DESKTOPHORZRES );
80 size.Height = GetDeviceCaps(hdc, DESKTOPVERTRES);
81 ReleaseDC(IntPtr.Zero, hdc);
82 return size;
83 }
84 }
85
86 /// <summary>
87 /// 获取宽度缩放百分比
88 /// </summary>
89 public static float ScaleX
90 {
91 get
92 {
93 IntPtr hdc = GetDC(IntPtr.Zero);
94 int t = GetDeviceCaps(hdc, DESKTOPHORZRES);
95 int d = GetDeviceCaps(hdc, HORZRES);
96 float ScaleX = (float)GetDeviceCaps(hdc, DESKTOPHORZRES) / (float)GetDeviceCaps(hdc, HORZRES);
97 ReleaseDC(IntPtr.Zero, hdc);
98 return ScaleX;
99 }
100 }
101 /// <summary>
102 /// 获取高度缩放百分比
103 /// </summary>
104 public static float ScaleY
105 {
106 get
107 {
108 IntPtr hdc = GetDC(IntPtr.Zero);
109 float ScaleY = (float)(float)GetDeviceCaps(hdc, DESKTOPVERTRES) / (float)GetDeviceCaps(hdc, VERTRES);
110 ReleaseDC(IntPtr.Zero, hdc);
111 return ScaleY;
112 }
113 }
114 #endregion
115 }
116 }
转载于:https://www.cnblogs.com/bjxingch/articles/9960423.html
获取系统DPI、系统显示比例等的更多相关文章
- C# API 获取系统DPI缩放倍数跟分辨率大小
原文:C# API 获取系统DPI缩放倍数跟分辨率大小 using System; using System.Drawing; using System.Runtime.InteropServices ...
- WPF 获取系统 DPI 的多种方法
原文:WPF 获取系统 DPI 的多种方法 WPF 获取系统 DPI 的多种方法 由于 WPF 的尺寸单位和系统的 DPI 相关,我们有时需要获取 DPI 值来进行一些界面布局的调整,本文汇总了一些 ...
- 【转载】Windows 10系统默认将画面显示比例调整至125%或150%,最高分辨率已经达到3840×2160(4K)这一级别。
高分屏打开软件界面模糊?不会设置太浪费 2017-08-31 19:37 抹又重彩 现在有好多朋友都喜欢并买了高分屏笔记本电脑.高分屏笔记本就是配有高分辨率屏幕的笔记本.为了给用户带来更好的视觉体验, ...
- 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机
本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...
- 第六篇 ANDROID窗口系统机制之显示机制
第六篇 ANDROID窗口系统机制之显示机制 ANDROID的显示系统是整个框架中最复杂的系统之一,涉及包括窗口管理服务.VIEW视图系统.SurfaceFlinger本地服务.硬件加速等.窗口管理服 ...
- 关于windows系统DPI增大导致字体变大的原因分析
最近再学习WPF开发,其中提到一个特性“分辨率无关性”,主要功能就是实现开发的桌面程序在不同分辨率的电脑上显示时,会根据系统的DPI自动进行UI的缩放,从而不会导致应用程序的失真. 这个里面就提到了个 ...
- 获取指定的系统路径 SHGetSpecialFolderPath
1.获取桌面的系统路径 TCHAR szLink[MAX_PATH + ] = { }; SHGetSpecialFolderPath(,szLink,CSIDL_DESKTOPDIRECTORY,) ...
- 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录
解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区 作者:njchenyi [字体:大 中 小] 我是先安装了Ubuntu 12.04 Server,然后 ...
- 【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示
本文主要讨论Qt中的系统托盘的设置.系统托盘想必大家都不陌生,最常用的就是QQ.系统托盘以简单.小巧的形式能让人们较快的打开软件.废话不多说,下面开始具体介绍. 首先,新建一个Qt Gui项目,类型选 ...
- JAVA获取系统信息以及系统时间
在做测试的时候,经常需要获取系统信息,并且用获取到的系统时间给生成的报告取名字. 以下代码实在TestNG展示的,没有Test NG的话需要些一个main方法. import java.net.Ine ...
随机推荐
- MySQL 在Docker下快速安装(Ubuntu 16.4)
采用dockerhub安装 docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/my ...
- Windows上安装Docker
一.下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows 二.安装直接下一步下一步就好了 具体可看: ht ...
- 安卓开发学习日记 DAY5——监听事件onClick的实现方法
今天主要学习了监听事件的是实现方法,就是说,做了某些动作后,怎么监听这个动作并作出相应反应. 方法主要有三种: 1.匿名内部类的方法 2.独立类的方法 3.类似实现接口的方法 以下分别分析: 1.匿名 ...
- Boyer-Moore字符串搜索(BM算法)的Python实现
BM算法根据两个判据来进行字符串匹配,分别是“坏字符规则”和‘好后缀规则",其中好后缀规则可以单独使用,算法的图解可以参照下面这篇博文: https://www.cnblogs.com/wx ...
- 29.1 collection层次结构 中的根接口
/* * Collection * boolean add(E e) * void clear() * boolean contains(Object o) * boolean isEmpty() * ...
- Struts2-学习笔记系列(14)-拦截器
6.1对action 的拦截 自定义拦截器: public class MyInterceptor extends AbstractInterceptor { private String name; ...
- 【python实现卷积神经网络】卷积层Conv2D反向传播过程
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- Spark 1.5 to 2.1.X
api差异参考官网地址:https://spark.apache.org/docs/2.1.1/sql-programming-guide.html#upgrading-from-spark-sql- ...
- python3(二十六)slots
""" """ __author__ = 'shaozhiqi' # python是动态语言,所以定义类后,我们可以动态的给类绑定属性和方法 ...
- JAVA开发中相对路径,绝对路径全面总结
JAVA开发中相对路径,绝对路径全面总结 博客分类: Java综合 JavaJSP应用服务器Servlet网络应用 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径, ...