• 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日)

  • 相关阅读:
    如何做好界面设计,分享这8个优秀的案例
    我有一篇Java Stream使用手册,学了就是你的了!
    鸿蒙应用开发初尝试《创建项目》,之前那篇hello world作废
    幸福里基于 Flink & Paimon 的流式数仓实践
    Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库
    JavaScript的路由
    数据结构之二叉树
    【PHP】sign加签方法示例
    Spark - Task 与 Partition 一一对应与参数详解
    常见的限流算法- python版本
  • 原文地址:https://blog.csdn.net/dgnankai/article/details/126018634