繁体   English   中英

获取和设置屏幕分辨率

[英]Get and Set Screen Resolution

如何使用 Visual C# 收集和更改屏幕分辨率?

为了检索屏幕分辨率,您需要使用System.Windows.Forms.Screen类。 Screen.AllScreens属性可用于访问系统上所有显示器的集合,或者您可以使用Screen.PrimaryScreen属性访问主显示器。

Screen类有一个名为Bounds的属性,您可以使用它来确定该类当前实例的分辨率。 例如,要确定当前屏幕的分辨率:

Rectangle resolution = Screen.PrimaryScreen.Bounds;

为了改变分辨率,事情变得有点复杂。 这篇文章(或这篇文章)提供了详细的实现和解释。 希望这可以帮助。

此代码将在 WPF 中完美运行。 您可以在页面加载或按钮单击中使用它。

      string screenWidth =System.Windows.SystemParameters.PrimaryScreenWidth.ToString();

      string screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight.ToString();

      txtResolution.Text ="Resolution : "+screenWidth + " X " + screenHeight;

在 C# 中,这是获取分辨率屏幕的方法:

按钮单击或表单加载:

string screenWidth = Screen.PrimaryScreen.Bounds.Width.ToString();
string screenHeight = Screen.PrimaryScreen.Bounds.Height.ToString();
Label1.Text = ("Resolution: " + screenWidth + "x" + screenHeight);

从不同的解决方案中回答以获得显示分辨率

  1. 获取比例因子

  2. 通过缩放因子结果获取 Screen.PrimaryScreen.Bounds.Width 和 Screen.PrimaryScreen.Bounds.Height 倍数

    #region Display Resolution [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] public static extern int GetDeviceCaps(IntPtr hDC, int nIndex); public enum DeviceCap { VERTRES = 10, DESKTOPVERTRES = 117 } public static double GetWindowsScreenScalingFactor(bool percentage = true) { //Create Graphics object from the current windows handle Graphics GraphicsObject = Graphics.FromHwnd(IntPtr.Zero); //Get Handle to the device context associated with this Graphics object IntPtr DeviceContextHandle = GraphicsObject.GetHdc(); //Call GetDeviceCaps with the Handle to retrieve the Screen Height int LogicalScreenHeight = GetDeviceCaps(DeviceContextHandle, (int)DeviceCap.VERTRES); int PhysicalScreenHeight = GetDeviceCaps(DeviceContextHandle, (int)DeviceCap.DESKTOPVERTRES); //Divide the Screen Heights to get the scaling factor and round it to two decimals double ScreenScalingFactor = Math.Round(PhysicalScreenHeight / (double)LogicalScreenHeight, 2); //If requested as percentage - convert it if (percentage) { ScreenScalingFactor *= 100.0; } //Release the Handle and Dispose of the GraphicsObject object GraphicsObject.ReleaseHdc(DeviceContextHandle); GraphicsObject.Dispose(); //Return the Scaling Factor return ScreenScalingFactor; } public static Size GetDisplayResolution() { var sf = GetWindowsScreenScalingFactor(false); var screenWidth = Screen.PrimaryScreen.Bounds.Width * sf; var screenHeight = Screen.PrimaryScreen.Bounds.Height * sf; return new Size((int)screenWidth, (int)screenHeight); } #endregion

检查显示分辨率

var size = GetDisplayResolution();
Console.WriteLine("Display Resoluton: " + size.Width + "x" + size.Height);

在 Winforms 中,有一个 Screen 类可用于获取有关连接到计算机的所有显示器的屏幕尺寸和颜色深度的数据。 这是文档页面:http: //msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx

更改屏幕分辨率比较棘手。 有一个 Resolution 第三方类,它包装了您本来要挂钩的本机代码。 使用其 CResolution 嵌套类将屏幕分辨率设置为新的高度和宽度; 但请理解,这样做仅适用于显示器实际支持的高度/宽度组合(800x600、1024x768 等,而不是 817x435)。

如果要收集屏幕分辨率,可以在 WPF 窗口中运行以下代码(该窗口就是this所指的窗口):

System.Windows.Media.Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
Double dpiX = m.M11 * 96;
Double dpiY = m.M22 * 96;

我花了很多时间试图弄清楚这一点,对于具有缩放因子的设备来说,由于在调用 C# 对象时缩放因子有时为 125% 或 150%,因此很难获得屏幕的实际大小返回值现在不正确,因此您需要进行 Windows API 调用以获取缩放因子并应用乘数,我为非 WPF 应用程序找到的唯一工作方式是这里

https://stackoverflow.com/a/21450169

要获得屏幕分辨率,WindowsAppSDK(nuget 上的 Microsoft.WindowsAppSDK)可以获取显示信息...

using Microsoft.UI.Windowing;
using Windows.Graphics;
...
RectInt32 region = DisplayArea.Primary.OuterBounds;
int w = region.Width;
int h = region.Height;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM