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. 在docker中部署redis主从配置

    环境说明: 阿里云服务器 Ubuntu 16.04 docker 1.拉取Redis镜像 docker pull redis 2.配置Redis启动配置文件,此处我创建一个专用目录,存放Redis相关 ...

  2. C语言 文件操作(七)

    C语言获取文件状态 stat() #include <sys/stat.h> #include <unistd.h> int stat(const char *file_nam ...

  3. django创建app

    前几天,

  4. Linux C++ 网络编程学习系列(5)——多路IO之epoll边沿触发

    多路IO之epoll边沿触发+非阻塞 源码地址:https://github.com/whuwzp/linuxc/tree/master/epoll_ET_LT_NOBLOCK_example 源码说 ...

  5. C与C++的函数声明中省略参数的不同意义

    一直都以为C/C++中形如 int func(); 这样的函数声明其意义就是一个参数 void(没有参数)的函数.然而今天在看C++的时候突然看到这么一句: 对于带空参数表的函数,C和C++有很大的不 ...

  6. 国外的一个代码 仓库 github --- 里面类似一个svn 的代码仓库

    https://github.com/wzhanke/shell 用户:wzh.e 邮箱:wzh.e@x.com 登陆密码:*wzh.e8*9

  7. 如何用python爬虫从爬取一章小说到爬取全站小说

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  8. stand up meeting 12/9/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云  --------------    --  -----------  -- PDF Reader 朱玉影 SDK终于差不 ...

  9. Eight HDU - 1043 (双向BFS)

    记得上人工智能课的时候老师讲过一个A*算法,计算估价函数(f[n]=h[n]+g[n])什么的,感觉不是很好理解,百度上好多都是用逆向BFS写的,我理解的逆向BFS应该是从终点状态出发,然后把每一种状 ...

  10. Redis Linux安装+配置

    1.进入指定目录,下载资源(也可本地下载后复制到指定目录) wget http://download.redis.io/releases/redis-5.0.5.tar.gz 2.解压到指定目录 ta ...