正在获取屏幕分辨率

本文关键字:分辨率 屏幕 获取 | 更新日期: 2023-09-27 18:26:00

如何获得屏幕分辨率?事实是,如果您更改操作系统方法设置中的缩放选项Screen.AllScreens[screenIndex].Bounds.Width给出了错误的分辨率。问题出现在4k显示器中。帮助解决。提前非常感谢!

private static Rectangle GetScreenRect(int screenIndex)
    {
        Rectangle screenRect = new Rectangle();
        screenRect.Size = new Size((Screen.AllScreens[screenIndex].Bounds.Width, Screen.AllScreens[screenIndex].Bounds.Height);
        screenRect.Location = new Point(Screen.AllScreens[screenIndex].Bounds.X, Screen.AllScreens[screenIndex].Bounds.Y);
        return screenRect;
    }

附言:我只使用.NET 2.0

正在获取屏幕分辨率

这不是错误的结果:)

它是兼容性层的一部分,允许旧应用程序在具有高DPI的系统上相对良好地运行。你的应用程序并没有告诉Windows它是新的,足够酷,可以很好地处理它,所以Windows假装它的屏幕比实际屏幕小——这允许你的应用软件像往常一样渲染,而Windows则处理让你的应用程序足够大,可以舒适地使用。

事实是,虽然Winforms实际上被设计成一个很好的框架,允许您处理多个DPI(以及本地化等),但它实际上并没有以这种方式使用。因此,大多数应用程序都像老式的MFC应用程序一样愚蠢——它们只是不能很好地扩展。

事实上,您的应用程序正是这些兼容层存在的原因-在.NET 2.0被弃用很久之后,您仍在使用它(我认为您也仍然支持Windows XP)。如果Windows没有对你的应用程序撒谎,它将完全不可用,因为文本太小,无法阅读(或者控件被随意丢弃,有些自动缩放,有些则不可用)。

现在,如果你觉得你的应用程序实际上能够正确处理DPI缩放(如果你没有设计它来做到这一点,它可能不会),你可以使用SetProcessDpiAwareness功能告诉Windows你不需要那些甜蜜的谎言-你可以自己处理缩放,谢谢。这有很多好处(一切看起来都会更清晰),但这意味着你需要在任何地方修复缩放。请注意,此功能在Windows 6之前版本上根本不存在(不进行DPI校正),并且您需要在Windows 6+上使用SetProcessDpiAwareness(SetProcessDpiAwareness是Windows 8.1+)。