获取屏幕比例

Get scale of screen

我们可以获得屏幕的分辨率和内容是 Screen class。所以,如果我们想在屏幕中央放置一些东西,我们应该使用 Screen.WorkingArea.WidthScreen.WorkingArea.Height

但是,在 Windows 8.1(不确定其他操作系统)中,可以缩放屏幕上的项目,如果它们看起来太小的话。您可以通过调用桌面上的上下文菜单 select "Screen Resolution",然后 select "Make text and other items larger or smaller".

来检查它

问题是,它似乎确实增加了屏幕分辨率!所以,Screen.WorkingArea.WidthScreen.WorkingArea.Height 会给你缩放值,点 Screen.WorkingArea.Width/2 Screen.WorkingArea.Height/2 将不再位于实际屏幕的中心(对于 200% 缩放,这个点将在较低的位置屏幕右上角)。这可能会搞砸很多 UI 项的放置。

那么,是否有可能获得缩放的价值?我找不到任何包含此信息的 class。

大多数检索 DPI 的方法都依赖于现有的控件,这有时可能会带来不便。但始终可以从注册表中检索 DPI。在 C# 中:

using Microsoft.Win32;
//...
var currentDPI = (int)Registry.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop", "LogPixels", 96);

比例将

var scale = 96/(float)currentDPI;
 var currentDPI = (int)Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics", "AppliedDPI", 0);
 SetClientSizeCore((int)((float)Width * (float)currentDPI/96.0f), (int)((float)Height * (float)currentDPI/96.0f));

这是在 Windows 10 上获取 DPI 信息的工作方法:

int DPI = Int32.Parse((string)Registry.GetValue(
   @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager",
   "LastLoadedDPI", "96"));