• C#扩展桌面的处理


    Windows支持多显示器,可以另第二显示器(笔记本外接显示器)成为桌面一部分。

    复制:第二显示器与第一显示器显示一直

    扩展:第二显示器与第一显示器合并为1个桌面(第二显示器任务栏是否显示可调整)

     仅……:关闭另一个不用的显示器

     用C#开发程序时,对这种扩展桌面如何处理呢?需要注意的是,有时桌面的缩放比例也会被用户调整,这将导致第二个桌面的其实外置发生改变。

    1、Screen.AllScreens.Count()    //获得当前系统显示器数量

    2、Screen.FromControl(this).DeviceName    //当期窗体说在桌面名称

    3、Screen.FromControl(this).Bounds.Width   //当期窗体所在桌面宽度

    4、Screen.AllScreens[1].Bounds.Width  //第2桌面宽度

    5、Screen.AllScreens[0].WorkingArea.Height  //第1桌面可用区域高

    6、Screen.AllScreens[0].Bounds.Height - Screen.AllScreens[0].WorkingArea.Height  //任务栏高

    7、Screen.PrimaryScreen.Bounds.Width  //主显示边界宽

    8、获取桌面DPI缩放比例

            [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;

            private static float GetDPIScale()
            {
                int x = GetSystemMetrics(SM_CXSCREEN);
                IntPtr hdc = GetDC(IntPtr.Zero);
                int w = GetDeviceCaps(hdc, DESKTOPHORZRES);
                return (float)w / x;
            }

    9、获取扩展桌面信息

    int myLeft = (int)((float)Screen.PrimaryScreen.Bounds.Width * GetDPIScale());

    int myTop = 0;
    int myWdith = Screen.AllScreens[1].Bounds.Width;
    int myHeight = Screen.AllScreens[1].Bounds.Height;
    ExtPlay.Left = myLeft;
    ExtPlay.Top = myTop;
    ExtPlay.Width = myWdith;
    ExtPlay.Height = myHeight;
    ExtPlay.Show();
    ExtPlay.TopMost = true;//窗体置顶层
    this.Focus();


    参考我的beigerExtPlay_A项目(2022年7月27日)

  • 相关阅读:
    雅思口语 23九月换题季最新考题答案
    「iOS」UI——无限轮播图实现与UIPageControl运用
    Echarts河北地图缺少雄安新区(合并、调整地图边缘)的解决办法
    机器学习/算法工程师面试题目与答案-深度学习部分1
    合作式智能运输系统-车用通信系统应用层及应用数据交互标准 第一阶段2020
    “rhdf5filters.so’ not found when install ‘glmGamPoi‘ package
    关于input直接上传文件夹
    HDFS命令行示例
    基于GRU与注意力机制实现法语-葡萄牙语的翻译详细教程 数据+代码
    云安全核心技术
  • 原文地址:https://blog.csdn.net/dgnankai/article/details/126018634