gpt4 book ai didi

c# - 如何获取windows控制台窗体的大小?

转载 作者:行者123 更新时间:2023-11-30 15:50:55 25 4
gpt4 key购买 nike

我正在寻找一种方法来获取控制台实际窗口的大小(以像素为单位)。到目前为止,我发现的所有内容都是使用 winforms 或 WPF,这两种我都不使用。我不是在寻找如何获得控制台窗口内的大小,而是在寻找窗口本身有多大。

最佳答案

我在网上搜索,但没有找到任何有用的东西。

所有答案都会返回全屏分辨率的字符数。

Windows 控制台在历史上是 DOS shell 的模拟。

来自 How to get the screen size of Console Application? :

using System.Management;  // Need assembly reference added to project

Console.Write("Console resolution in char:");
Console.Write(Console.WindowWidth + "x" + Console.WindowHeight);

var scope = new ManagementScope();
scope.Connect();
var query = new ObjectQuery("SELECT * FROM Win32_VideoController");
using ( var searcher = new ManagementObjectSearcher(scope, query) )
foreach ( var result in searcher.Get() )
Console.WriteLine("Screen resolution in pixels: {0}x{1}",
result.GetPropertyValue("CurrentHorizontalResolution"),
result.GetPropertyValue("CurrentVerticalResolution"));

它返回当前视频驱动模式的屏幕分辨率。

Windows 命令行不再是 DOS 命令行,而是简化的 shell。

许多东西和许多 DOS 命令都丢失了。

您不能再在控制台本身中创建程序。

命令行输出 API 现在非常简单和基本。

如今,控制台应用程序只能知道其以字符为单位的分辨率。

没有更高级的 API 也没有可用的中断。

在 Windows Me 之后,Windows DOS shell COMMAND.COM 已被放弃,取而代之的是命令提示符 CMD.EXE。

没有简单的方法可以知道“托管”内部控制台的 Windows 的像素分辨率是多少。

using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;

[DllImport("user32.dll")]
private static extern int GetWindowRect(IntPtr hwnd, out Rectangle rect);

Rectangle rect;
GetWindowRect(Process.GetCurrentProcess().MainWindowHandle, out rect);
Console.WriteLine($"Console window location: {rect.X}x{rect.Y}");
Console.WriteLine($"Console window resolution: {rect.Width}x{rect.Height}");

但结果不是很准确。

例如它显示:

Console window location: 187x174
Console window resolution: 1336x812

当真实分辨率为1149x638时...

并且这个控制台窗口分辨率在每次运行时都不同......

Console window location: 99x58
Console window resolution: 1248x696

Console window location: 143x116
Console window resolution: 1292x754

Console window location: 77x29
Console window resolution: 1226x667

Console window location: 187x174
Console window resolution: 1336x812

真正的控制台窗体大小是:

RealWidth = rect.Width - rect.X;
RealHeight = rect.Height - rect.Y;

关于c# - 如何获取windows控制台窗体的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58785528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com