首页 > 其他分享 >winform实时获取系统dpi

winform实时获取系统dpi

时间:2024-09-03 18:49:05浏览次数:11  
标签:GetDeviceCaps IntPtr int 实时 获取 hdc static dpi winform

环境: window10

   框架:4.5.2

由于 windows10的DPI设置 无法直接获取屏幕的真实长宽
获取长宽代码
int iH = Screen.PrimaryScreen.Bounds.Height;
int iW = Screen.PrimaryScreen.Bounds.Width;

两种方法:
1、使用上边代码获取缩放后的长宽
iH*DPI(1.25)=真实高度
DPI获取方法:

#region Dll引用
        [DllImport("User32.dll", EntryPoint = "GetDC")]
        private extern static IntPtr GetDC(IntPtr hWnd);

        [DllImport("User32.dll", EntryPoint = "ReleaseDC")]
        private extern static int ReleaseDC(IntPtr hWnd, IntPtr hDC);

        [DllImport("gdi32.dll")]
        public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

        [DllImport("User32.dll")]
        public static extern int GetSystemMetrics(int hWnd);

        const int DESKTOPVERTRES = 117;
        const int DESKTOPHORZRES = 118;
        
        const int SM_CXSCREEN = 0;
        const int SM_CYSCREEN = 1;

        #endregion


        /// <summary>
        /// 获取DPI缩放比例
        /// </summary>
        /// <param name="dpiscalex"></param>
        /// <param name="dpiscaley"></param>
        public static void GetDPIScale(ref float dpiscalex, ref float dpiscaley)
        {
            int x = GetSystemMetrics(SM_CXSCREEN);
            int y = GetSystemMetrics(SM_CYSCREEN);
            IntPtr hdc = GetDC(IntPtr.Zero);
            int w = GetDeviceCaps(hdc, DESKTOPHORZRES);
            int h = GetDeviceCaps(hdc, DESKTOPVERTRES);
            ReleaseDC(IntPtr.Zero, hdc);
            dpiscalex = (float)w / x;
            dpiscaley = (float)h / y;
        }

2、直接获取分辨率

/// <summary>
            /// 获取分辨率
            /// </summary>
            /// <param name="width">宽</param>
            /// <param name="height">高</param>
            private static void GetResolving(ref int width, ref int height)
            {
                IntPtr hdc = GetDC(IntPtr.Zero);
                width = GetDeviceCaps(hdc, DESKTOPHORZRES);
                height = GetDeviceCaps(hdc, DESKTOPVERTRES);
                ReleaseDC(IntPtr.Zero, hdc);
            }

 

标签:GetDeviceCaps,IntPtr,int,实时,获取,hdc,static,dpi,winform
From: https://www.cnblogs.com/dachuang/p/18395178

相关文章

  • 如何设计真正的实时数据湖?
    汽车制造行业在企业数据管理方案上的探索已有数十年之久,本文以辩证的视角回顾了这段发展史,先后分析了专用数据仓库时期、以湖代仓时期,以及湖仓一体时期的业界普遍共识。本文作者结合自己在不同时期基于对数据技术的挖掘,分享了对这些“流行观点”的理解、反思、消化与再造。通过剖......
  • 本地搭建 Whisper 语音识别模型实现实时语音识别研究
    目录摘要关键词1.引言2.Whisper模型简介3.环境准备4.系统架构与实现4.1模型加载4.2实时音频输入处理4.3实时转录处理4.4程序实现的框架4.5代码实现5.实验与结果6.讨论7.结论参考文献摘要语音识别技术近年来发展迅速,广泛应用于智能家居、智能客......
  • 告别无进度等待:Linux系统中为cp和mv命令加上实时进度条
    文章目录告别无进度等待:Linux系统中为cp和mv命令加上实时进度条一、advcpmv简介二、advcpmv的优势三、安装advcpmv3.1前置准备3.2设置环境变量3.3下载并安装3.4手动安装步骤3.5配置别名四、使用advcpmv4.1查看帮助信息4.2实际操作五、总结辛苦您也关注下公众号,感谢!告......
  • 反光衣实时识别检测系统
    反光衣实时识别检测系统是根据视频流的自动化图像识别检测,运用前沿的深度神经网络与云计算技术,替代工作人员的眼睛。在工地、化工厂、煤矿石化等生产安全地区部署反光衣实时识别检测系统,运用现场已有的视频监控可以无死角全自动检测生产安全地区,对作业工作人员是不是穿戴反光衣开......
  • 解决WinForm程序在高DPI屏幕下界面缩放错误
    在高DPI设置下,WinForm应用程序的界面可能会出现扭曲或缩放不正确的问题。这是因为默认情况下,WinForm的布局和控件尺寸是基于标准DPI设计的,当在高DPI环境下运行时,界面可能会被强制缩放,导致控件排列不正确或模糊。要解决这个问题,你可以尝试以下几种方法:1.启用DPI感知(DPI......
  • Winform点击按钮Panle切换页面的实现
    一、项目结构二、主界面Main.csPanelName:panel1 三、代码实现namespace测试窗口切换{publicpartialclassMain:Form{//先定义对应的私有字段privateCmmPage_cmmPage;privateTwoPage_twoPage;publicMain()......
  • 助力移动道路交通环保治理,打赢蓝天保卫战,基于YOLO家族最新端到端实时算法YOLOv10全系
    在快速发展的现代社会中,工业化的步伐虽推动了城市的繁荣,但环保问题也随之成为我们不得不面对的重大挑战。特别是在移动道路交通领域,路边与路面裸土堆积、道路扬尘等问题,不仅影响城市形象,更对空气质量与居民健康构成了严重威胁。面对这一现状,传统的监测治理手段已难以满足高效、......
  • Apache DolphinScheduler大规模任务调度系统对大数据实时Flink任务支持
    转载自神龙大侠我是用olphinScheduler3.2.1版本做源代码编译部署(部署方式参考我的另外一篇文档《源代码编译,ApacheDolphinScheduler前后端分离部署解决方案》)二进制文件部署本文也适用,只需要修改相对应的配置即可。资源管理底层基座替换成hdfsFlink程序jar包是在资源中心进......
  • YOLOS:大道至简,直接使用预训练ViT进行实时目标检测 | NeurIPS 2021
    论文探索了在中型ImageNet-1k数据集上预训练的普通ViT到更具挑战性的COCO目标检测基准的可迁移性,提出了基于VisionTransformer的YouOnlyLookatOneSequence(YOLOS)目标检测模型。在具有挑战性的COCO目标检测基准上的实验结果表明,2D目标检测可以以纯sequence-to-sequence的方......
  • 打破工业实时库势力边界,TDengine 与工业 SCADA 深度融合
    TDengine随着时序数据库(TimeSeriesDatabase)的日益普及,越来越多的工业自动化控制(工控)人员开始认识到其强大能力。然而,时序数据库在传统实时数据库应用领域,特别是在过程监控层的推广仍面临挑战,主要原因在于缺乏适合操作技术(OT)人员使用的连接方式。在工业自动化的五层架构中,过程监控......