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

  • 相关阅读:
    MySQL场景面试,你是如何进行SQL优化的?
    常用python包环境命令总结
    【吞噬星空】爽翻,徐欣喜提永恒之体,罗峰秒杀败类,阿特金磕头认错
    文心一言 VS 讯飞星火 VS chatgpt (88)-- 算法导论8.3 1题
    Julia编程基础
    redis高级
    Percolation: Slipping through the Cracks
    Java面试题
    VueCLI核心知识综合案例TodoList
    速看:免费领取4台阿里云服务器_申请入口及领取流程
  • 原文地址:https://blog.csdn.net/dgnankai/article/details/126018634