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、系统显示比例等的更多相关文章

  1. C# API 获取系统DPI缩放倍数跟分辨率大小

    原文:C# API 获取系统DPI缩放倍数跟分辨率大小 using System; using System.Drawing; using System.Runtime.InteropServices ...

  2. WPF 获取系统 DPI 的多种方法

    原文:WPF 获取系统 DPI 的多种方法 WPF 获取系统 DPI 的多种方法 由于 WPF 的尺寸单位和系统的 DPI 相关,我们有时需要获取 DPI 值来进行一些界面布局的调整,本文汇总了一些 ...

  3. 【转载】Windows 10系统默认将画面显示比例调整至125%或150%,最高分辨率已经达到3840×2160(4K)这一级别。

    高分屏打开软件界面模糊?不会设置太浪费 2017-08-31 19:37 抹又重彩 现在有好多朋友都喜欢并买了高分屏笔记本电脑.高分屏笔记本就是配有高分辨率屏幕的笔记本.为了给用户带来更好的视觉体验, ...

  4. 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机

    本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...

  5. 第六篇 ANDROID窗口系统机制之显示机制

    第六篇 ANDROID窗口系统机制之显示机制 ANDROID的显示系统是整个框架中最复杂的系统之一,涉及包括窗口管理服务.VIEW视图系统.SurfaceFlinger本地服务.硬件加速等.窗口管理服 ...

  6. 关于windows系统DPI增大导致字体变大的原因分析

    最近再学习WPF开发,其中提到一个特性“分辨率无关性”,主要功能就是实现开发的桌面程序在不同分辨率的电脑上显示时,会根据系统的DPI自动进行UI的缩放,从而不会导致应用程序的失真. 这个里面就提到了个 ...

  7. 获取指定的系统路径 SHGetSpecialFolderPath

    1.获取桌面的系统路径 TCHAR szLink[MAX_PATH + ] = { }; SHGetSpecialFolderPath(,szLink,CSIDL_DESKTOPDIRECTORY,) ...

  8. 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录

    解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区  作者:njchenyi [字体:大 中 小]   我是先安装了Ubuntu 12.04 Server,然后 ...

  9. 【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示

    本文主要讨论Qt中的系统托盘的设置.系统托盘想必大家都不陌生,最常用的就是QQ.系统托盘以简单.小巧的形式能让人们较快的打开软件.废话不多说,下面开始具体介绍. 首先,新建一个Qt Gui项目,类型选 ...

  10. JAVA获取系统信息以及系统时间

    在做测试的时候,经常需要获取系统信息,并且用获取到的系统时间给生成的报告取名字. 以下代码实在TestNG展示的,没有Test NG的话需要些一个main方法. import java.net.Ine ...

随机推荐

  1. Github使用SSH的步骤

    1) 打开git bash命令行工具 2) 输入下面命令生成一对私钥和公钥 ssh-keygen -t rsa -b 4096 -C "你的github的邮箱" 3) 输入公钥和私 ...

  2. Linux - ubuntu下Vim安装失败,报The following packages have unmet dependencies: vim : Depends: vim-common

    错误命令行 root@ubuntu:/etc/apt# apt install vim Reading package lists... Done Building dependency tree R ...

  3. 关于selenium定位元素时,出现此问题的处理办法:find_element=wait.until(ec.presence_of_element_locatetd(locator))定位不到页面元素的问题

    最近再用,selenium中的from selenium.webdriver.common.by import By方法时,一直报错如下(图一),各种百度都没有解决,最后只能脱离框架,从最原始的代码开 ...

  4. MTK Android Driver :Memory

    型号配置: 1.CUSTOM_MEMORY_HDR(需要确认是否是MTK认证的flash ic) mediatek\custom\$(PROJECT)\preloader\inc\custom_Mem ...

  5. docker-compose 部分错误

    Get https://hub.17kxkx.com/v2/: dial tcp 39.106.209.67:443: connect: connection refused vim /etc/doc ...

  6. Flask 入门(八)

    flask操作数据库:操作数据: 承接上文: 修改main.py中的代码如下: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from ...

  7. Linux 文件管理篇(三 属性管理)

    可读        r 可写        w 可执行        x 档案属性: 第一栏:执行list -al后第一栏的十个标志[1 - 10] 1: d    目录 -    档案 l    连 ...

  8. Python操作rabbitmq系列(四):根据类型订阅消息

    在上一章中,所有的接收端获取的所有的消息.这一章,我们将讨论,一些消息,仍然发送给所有接收端.其中,某个接收端,只对其中某些消息感兴趣,它只想接收这一部分消息.如下图:C1,只对error感兴趣,C2 ...

  9. mysql 多个属性排序查询

    查询 排序(order by) 语法:order by 字段 asc/desc asc 顺序,正序.数值 :递增,字母:自然顺序(a-z) desc 倒序 反序 数值:递减, 字母:自然反序 查询的宗 ...

  10. AQS系列(七)- 终篇:AQS总结

    前言 本文是对之前AQS系列文章的一个小结,首先看看以下几个问题: 1.ReentrantLock和ReentrantReadWriteLock的可重入特性是如何实现的? 2.哪个变量控制着锁是否被占 ...