获取并设置屏幕分辨率

时间:2011-02-22 19:01:21

标签: c# screen screen-resolution

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

7 个答案:

答案 0 :(得分:82)

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

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

Rectangle resolution = Screen.PrimaryScreen.Bounds;

对于更改分辨率,事情会变得复杂一些。 This article(或this one)提供了详细的实施和说明。希望这会有所帮助。

答案 1 :(得分:10)

在C#中,这是如何获得分辨率屏幕:

按钮单击或表单加载:

int max = i;
if (j > max)
    max = j;
if (k > max)
    max = k;
if (l > max)
    max = l;
if (m > max)
    max = m;
if (n > max)
    max = n;
if (o > max)
    max = o;
return max;

答案 2 :(得分:4)

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

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

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我花了很多时间来解决这个问题,因为使用比例因子的设备很难获得屏幕的实际尺寸,这是因为在调用时,比例因子有时为125%或150% C#对象的返回值现在不正确,因此您需要进行Windows API调用以获取缩放因子并应用乘数,我在非WPF应用程序中发现的唯一工作方式是

https://stackoverflow.com/a/21450169

答案 6 :(得分:0)

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

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