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. JavaScript基本数据类型及其转换规则

    ECMAScript 数据类型 ECMAScript中有五种基本数据类型:Undefined, Null, Boolean, Number, String 一种复杂数据类型:Object 数据类型检测 ...

  2. 各种版本docker下载的中国开源地址

    最近在群里听说Docker很火,于是自己抱着试试的态度,想玩玩,可是遇到了一些问题,记录下来,方便备忘,也方便防止大家被坑. 我的虚拟机装的是centos 6.5,百度了好多教程,丫的,都不解释,就一 ...

  3. Vim中实现PHP函数tags跳转

    编译安装ctags 下载地址:http://ctags.sourceforge.net/ 下载文件:ctags-5.8.tar.gz 解压ctags:tar -zxcf ctags-5.8.tar.g ...

  4. Linux网络架设篇,虚拟机l系统中网卡设备名与配置文件不符如何处理?

    很多情况下,当我们在虚拟机中安装好linux系统后,并不能成功连上网.当我们配置好相关IP地址后同样不能成功连接网络.并且会体会网卡名与配置名不符,这时候应该怎么办呢? 1.清空下面文件 /etc/u ...

  5. Linux管理,例行性工作,at和cron

    at 仅执行一次就结束调度(服务atd必须启动) at的配置信息 1.我们设定的at进程其实都是被以文本的方式写入到/var/spool/at/目录内,然后这些设定的进程便会等待atd服务来启动这些进 ...

  6. linux之进程管理(二)

    一.查看进程 ps   aux 查看系统所有的进程数据 ps   -lA 查看所有系统的数据 ps   axjf 连同部分进程树状态 ps参数 -A   显示所有进程,等效 -e -a   不与ter ...

  7. idle中上传jar包并使用的方法

    创建一个lib目录,将jar包拉到该目录下. 需要导入的Jar包上,点击右键,选择Add as Library…

  8. CSS盒模型属性详细介绍

    一.概述 CSS盒模型是定义元素周围的间隔.尺寸.外边距.边框以及文本内容和边框之间内边距的一组属性的集合. 示例代码: <!DOCTYPE html> <html lang=&qu ...

  9. Arthas-Java的线上问题定位工具

    Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar ...

  10. 怎么快速学python?酒店女服务员一周内学会Python,一年后成为程序员

    怎么快速学python?有人说,太难!但这个女生却在一个星期内入门Python,一个月掌握python所有的基础知识点. 说出来你应该不信,刚大学毕业的女生:琳,一边在酒店打工,一边自学python, ...