获得屏幕规模

时间:2015-09-16 11:34:40

标签: c# screen-resolution

我们可以获得解析,屏幕上的内容为Screen类。因此,如果我们想在屏幕中心放置一些内容,我们应该使用Screen.WorkingArea.WidthScreen.WorkingArea.Height

但是,在Windows 8.1中(不确定其他操作系统),如果它们看起来太小,就有可能在屏幕上缩放项目。您可以通过调用桌面上的上下文菜单进行检查,选择"屏幕分辨率",然后选择"使文本和其他项目更大或更小"。

问题是,它似乎确实提高了屏幕分辨率!因此,Screen.WorkingArea.WidthScreen.WorkingArea.Height会为您提供缩放值,点Screen.WorkingArea.Width/2 Screen.WorkingArea.Height/2将不再位于实际屏幕的中心(对于200%缩放,此点将会降低屏幕的右上角)。这可能会妨碍UI项目的大量放置。

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

3 个答案:

答案 0 :(得分:2)

检索DPI的大多数方法取决于现有控件,有时可能不方便。但是DPI总是可以从注册表中检索出来。在C#中:

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

比例将是

var scale = 96/(float)currentDPI;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是在Windows 10上获取DPI信息的有效方法:

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