【问题标题】:Get screen resolution in console app在控制台应用程序中获取屏幕分辨率
【发布时间】:2017-12-21 18:20:31
【问题描述】:

如何在控制台应用程序中获得屏幕分辨率(如果可能)?

Forms 我可以使用:

int height = Screen.PrimaryScreen.Bounds.Height;
int width = Screen.PrimaryScreen.Bounds.Width;

但我正在寻找专门的控制台方式。


所以解决我的问题的方法是Marc-Antoine Jutras提出的。我需要int 值所以我是这样的:

    int height = Convert.ToInt32(SystemParameters.PrimaryScreenHeight);
    int width = Convert.ToInt32(SystemParameters.PrimaryScreenWidth);

【问题讨论】:

  • 对于控制台应用程序没有特定的方法可以做到这一点,因为控制台毕竟只是一个窗口;您可以只引用System.Windows.Forms 并使用与以前相同的代码。
  • @Clint 没有。有可能
  • 您可以使用GDI。刚刚检查过 - 就像一个魅力。要使用答案中的 sn-p,请添加 include System.Drawing; using System.Runtime.InteropServices;
  • @Sergey.quixoticaxis.Ivanov 好吧。但是有很多方法可以给猫剥皮。这不是一种“特定于控制台的方式”。当然,您可以 p/invoke 来获取它,但是为什么要在添加引用时麻烦您呢?
  • @Clint 因为 PresentationFoundation 很重,Forms 也很重,都带来一堆依赖。

标签: c#


【解决方案1】:
ManagementObjectSearcher mydisplayResolution = new ManagementObjectSearcher("SELECT CurrentHorizontalResolution, CurrentVerticalResolution FROM Win32_VideoController");
            foreach (ManagementObject record in mydisplayResolution.Get())
            {
                Console.WriteLine("-----------------------Current Resolution---------------------------------");
                Console.WriteLine("CurrentHorizontalResolution  -  " + record["CurrentHorizontalResolution"]);
                Console.WriteLine("CurrentVerticalResolution  -  " + record["CurrentVerticalResolution"]);

            }

【讨论】:

    【解决方案2】:

    您可以使用 System.Windows 命名空间,在 SystemParameters 类中您具有以下属性:

    PrimaryScreenWidth

    PrimaryScreenHeight

    我相信有人在回答这个问题时做了参考:Get and Set Screen Resolution

    但您必须将 PresentationFramework.dll 添加到您的控制台项目中。

    using System.Windows;
    
    namespace DispResolution
    {
        class Program
        {
            static void Main(string[] args)
            {
                double height = SystemParameters.PrimaryScreenHeight;
                double Width = SystemParameters.PrimaryScreenWidth;
            }
        }
    }
    

    【讨论】:

    • 如果另一个问题有解决这个问题的答案,请将此问题标记为重复,而不是发布答案。或者发表评论。
    • 它不起作用,因为DPI设置为125%,宽度和高度变成(1536, 864)而不是(1920, 1080)
    【解决方案3】:

    WMI 是一个选项;

    int width;
    int height;
    var managementScope = new System.Management.ManagementScope();
    managementScope.Connect();
    var q = new System.Management.ObjectQuery("SELECT CurrentHorizontalResolution, CurrentVerticalResolution FROM Win32_VideoController");
    var searcher = new System.Management.ManagementObjectSearcher(managementScope, q);
    var records = searcher.Get();
    foreach (var record in records)
    {
        if (!int.TryParse(record.GetPropertyValue("CurrentHorizontalResolution").ToString(), out width))
        {
            throw new Exception("Throw some exception");
        }
        if (!int.TryParse(record.GetPropertyValue("CurrentVerticalResolution").ToString(), out height))
        {
            throw new Exception("Throw some exception");
        }
    }
    Output: 
    Width:  1680
    Height: 1050
    

    【讨论】:

    • 我在 Windows 10 中为我工作过。我有多个显示器,但它似乎只返回其中一个的分辨率。
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多