开发者社区> 杰克.陈> 正文

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

简介: 原文:C# API 获取系统DPI缩放倍数跟分辨率大小 using System; using System.Drawing; using System.
+关注继续查看
原文:C# API 获取系统DPI缩放倍数跟分辨率大小

using System;  
using System.Drawing;  
using System.Runtime.InteropServices;  
  
namespace XYDES  
{  
    public class PrimaryScreen  
    {  
        #region Win32 API  
                [DllImport("user32.dll")]  
                 static extern IntPtr GetDC(IntPtr ptr);  
                [DllImport("gdi32.dll")]  
                 static extern int GetDeviceCaps(  
                IntPtr hdc, // handle to DC  
                int nIndex // index of capability  
                );  
                [DllImport("user32.dll", EntryPoint = "ReleaseDC")]  
                 static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);  
        #endregion  
        #region DeviceCaps常量  
                const int HORZRES = 8;  
                const int VERTRES = 10;  
                const int LOGPIXELSX = 88;  
                const int LOGPIXELSY = 90;  
                const int DESKTOPVERTRES = 117;  
                const int DESKTOPHORZRES = 118;  
        #endregion  
 
        #region 属性  
        /// <summary>  
        /// 获取屏幕分辨率当前物理大小  
        /// </summary>  
           public static Size WorkingArea  
            {  
                get {  
                    IntPtr hdc = GetDC(IntPtr.Zero);  
                    Size size = new Size();  
                    size.Width = GetDeviceCaps(hdc, HORZRES);  
                    size.Height = GetDeviceCaps(hdc, VERTRES);  
                    ReleaseDC(IntPtr.Zero, hdc);  
                    return size;      
                }  
            }  
        /// <summary>  
           /// 当前系统DPI_X 大小 一般为96  
        /// </summary>  
            public static int DpiX  
            {  
                get  
                {  
                    IntPtr hdc = GetDC(IntPtr.Zero);  
                    int DpiX = GetDeviceCaps(hdc, LOGPIXELSX );  
                    ReleaseDC(IntPtr.Zero, hdc);  
                    return DpiX;  
                }  
            }  
        /// <summary>  
        /// 当前系统DPI_Y 大小 一般为96  
        /// </summary>  
            public static int DpiY  
            {  
                get  
                {  
                    IntPtr hdc = GetDC(IntPtr.Zero);  
                    int DpiX = GetDeviceCaps(hdc,LOGPIXELSY);  
                    ReleaseDC(IntPtr.Zero, hdc);  
                    return DpiX;  
                }  
            }  
        /// <summary>  
            /// 获取真实设置的桌面分辨率大小  
        /// </summary>  
            public static Size DESKTOP  
            {  
                get  
                {  
                    IntPtr hdc = GetDC(IntPtr.Zero);  
                    Size size = new Size();  
                    size.Width = GetDeviceCaps(hdc,DESKTOPHORZRES );  
                    size.Height = GetDeviceCaps(hdc, DESKTOPVERTRES);  
                    ReleaseDC(IntPtr.Zero, hdc);  
                    return size;      
                }  
            }  
  
            /// <summary>  
            /// 获取宽度缩放百分比  
            /// </summary>  
            public static float ScaleX  
            {  
                get  
                {  
                    IntPtr hdc = GetDC(IntPtr.Zero);  
                    int t = GetDeviceCaps(hdc, DESKTOPHORZRES);  
                    int d = GetDeviceCaps(hdc, HORZRES);  
                    float ScaleX = (float)GetDeviceCaps(hdc, DESKTOPHORZRES) / (float)GetDeviceCaps(hdc, HORZRES);   
                    ReleaseDC(IntPtr.Zero, hdc);  
                    return ScaleX;  
                }  
            }  
            /// <summary>  
            /// 获取高度缩放百分比  
            /// </summary>  
            public static float ScaleY  
            {  
                get  
                {  
                    IntPtr hdc = GetDC(IntPtr.Zero);  
                    float ScaleY = (float)(float)GetDeviceCaps(hdc, DESKTOPVERTRES) / (float)GetDeviceCaps(hdc, VERTRES);  
                    ReleaseDC(IntPtr.Zero, hdc);  
                    return ScaleY;  
                }  
            }  
       #endregion  
    }  
}  


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
几种不常用Web API(振动、重力感应、联网状态、系统电量信息、页面可见性、canvas转base64、监听屏幕旋转、元素全屏显示)
navigator对象中有一些不常用的API,以下主要介绍vibrate振动,deviceorientation重力感应,online联网状态,getBattery系统电量信息,visibilitychange页面可见性,toDataURL(canvas转base64),orientationchange监听屏幕旋转和fullScreen元素全屏显示。
122 0
用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块
用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块
73 0
Vue3+TS系统学习十一 - 详解Vue3 Composition API(二下)
前面给大家分享了Options API语法中代码的复用、Options API编码的优缺点,以及setup函数,响应式API等,这次将给大家分享Vue3 Composition API中的计算属性,侦听器,生命周期函数,Provide和Inject等。 1.1 computed
330 0
Vue3+TS系统学习十一 - 详解Vue3 Composition API(二上)
前面给大家分享了Options API语法中代码的复用、Options API编码的优缺点,以及setup函数,响应式API等,这次将给大家分享Vue3 Composition API中的计算属性,侦听器,生命周期函数,Provide和Inject等。 1.1 computed
223 0
Vue3+TS系统学习十 - 详解Vue3 Composition API(一)
代码逻辑复用(logic reuse)一直是开发中(任何开发)一个非常重要的功能。 对于当前组件化盛行的前端开发来说,如何可以更多的对组件中的代码逻辑进行复用是一致在探索的一个话题,无论是在React、Vue,还是在Angular中。 那么接下来,我们就一起来看一下目前比较常见的在Vue中可以实现组件代码复用的方式,并且会详细、深入的学习一下Vue3最新的Composition API。
275 0
客户端开发(Electron)系统级API使用2
客户端开发(Electron)系统级API使用2
153 0
客户端开发(Electron)系统级API使用
客户端开发(Electron)系统级API使用
540 0
如何在Windows系统上使用Object Detection API训练自己的数据?
之前写了一篇如何在windows系统上安装Tensorflow Object Detection API?(点击跳转) 然后就想着把数据集换成自己的数据集进行训练得到自己的目标检测模型。动手之前先学习了一波别人是如何实现的,看了大多数教程都有一个小问题:用VOC2012数据集进行训练当做用自己的数据集。 然而,初心想看的是自己的数据集啊!于是就自己来撸一篇教程,方便自己也给别人一些参考吧~
145 0
如何在windows系统上安装Tensorflow Object Detection API?
都说Linux是最适合程序员使用的操作系统,这话还真不假。 之前一直在云服务器上跑代码,近期接手了师兄的台式机(GTX 1050),虽然配置很渣,但想在本地玩玩看,于是乎先安装一波Tensorflow Object Detection API。 之前云服上配置的时候十分顺利,可是到了windows下很容易进坑,这里简单整理下踩坑后的总结。
281 0
首个API BANK正式推出:把银行从街边开到企业ERP系统内部
首个API BANK正式推出:把银行从街边开到企业ERP系统内部
219 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
数据资源的基础设施API总线
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载