如何获取控制台应用程序的屏幕大小?

5

如何在控制台应用程序中获取屏幕大小?


屏幕是指控制台大小还是显示分辨率? - SLaks
我说的是控制台应用程序的屏幕尺寸,而不是针对控制台应用程序的尺寸......这是有区别的。对于那个给了-1的人(如果是因为他们认为问题是关于控制台尺寸的话,顺便说一句,如果你正确地阅读了问题,它并不是),不要因为你读错了就憎恨我!对于其他所有人,我很抱歉我的行为,并感谢你们的回答 :) - user1344948
@user1344948,你的评论标题字面上写着“如何获取控制台应用程序的屏幕尺寸?”当你(部分地)错误时不要恨别人...尽管如此,这个线程提供了控制台和屏幕的尺寸 - 赢了! - devklick
这个问题可能有点老了,但我现在也遇到了同样的问题。L.B的解决方案要求我添加对System.Windows.Forms的引用,而Iliya Tryapitsin的解决方案则依赖于操作系统。很遗憾,在控制台应用程序中没有简单的跨操作系统的方法来解决这个问题。 - Robert S.
3个回答

12
var w = Console.WindowWidth;
var h = Console.WindowHeight;

--编辑--

Screen.PrimaryScreen.Bounds 
Screen.PrimaryScreen.WorkingArea

不是我想要的...我想要的是显示尺寸,可能在那一点上没有表述清楚。 - user1344948
"Screen" 类仅在 "System.Windows.Forms" 程序集中提供,因此这可能是可能的(通过手动添加引用),但这将仅为此目的需要该程序集。 - Robert S.
@RobertS。我认为打负分并不公平,至少对某些人来说它是一个答案。随便发表一个更好的、与操作系统无关的解决方案,我会点赞的。 - L.B
@L.B 抱歉,但他明确要求控制台应用程序,并且默认情况下此类项目中没有 Screen 类。这可能是一种解决方案,但我认为不建议使用,因为您只为如此微小的目的添加了一个大依赖项。 - Robert S.

3

如果你想改变控制台应用程序的大小以适应屏幕大小,我们首先需要获取窗口的最大宽度和高度。

var largestWindowX = Console.LargestWindowWidth;
var largestWindowY = Console.LargestWindowHeight;

对于分辨率为1920x1080的屏幕,最大的X和Y值分别是X:240和Y:66。通过将这些值写入屏幕,我们可以手动更改屏幕大小以获取该屏幕大小的相应X和Y坐标。
现在,我们取最后一个屏幕大小(在本例中为1600x1024)的最大值,即X:200和Y:62,并检查屏幕是否大于或等于显示器大小,并使控制台窗口如此大
if(largestWindowX >= 200 && largestWindowY >= 62)
{
    //The values 200 and 40 can be changed depending on what you are making
    Console.SetWindowSize(200, 40);
}
//add more if else statments depending how you wish to scale it as.
else
{
    //Otherwise any screen size smaller than the sizes added make it this...
    Console.SetWindowSize(/*Your X value*/, /*Your Y value*/);
}

如果您想从操作系统中查找显示器大小的方法,我不知道,因为我不是高级程序员,只是了解其中一些知识。

但是,您可以在某种程度上使用上述变量的值。例如:

if(largestWindowX == 240 && largestWindowY == 66)
{
     Console.WriteLine("This is a 1920x1080 screen");
}

我不确定这是一种准确的屏幕尺寸说法。否则,如果需要全屏,则可以使用Alt+Enter...


3

如果您想获取显示器的尺寸,可以使用 WMI(Windows 管理工具)。

        var scope = new ManagementScope();
        scope.Connect();

        var query = new ObjectQuery("SELECT * FROM Win32_VideoController");

        using (var searcher = new ManagementObjectSearcher(scope, query))
        {
            var results = searcher.Get();
            foreach (var result in results)
            {
                Console.WriteLine("Horizontal resolution: " + result.GetPropertyValue("CurrentHorizontalResolution"));
                Console.WriteLine("Vertical resolution: " + result.GetPropertyValue("CurrentVerticalResolution"));
            }               
        }

我正在使用Visual Studio在运行在MacOS主机上的Windows 10虚拟机上工作。这是唯一真正返回虚拟客户端分辨率的方法。Screen.PrimaryScreen方式返回的是主机的分辨率。 - lukiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接