如何在 Windows 11 上更改控制台大小?

问题描述 投票:0回答:1

我编写了一段代码来减小控制台的大小。但这在 Windows 11 上不起作用,使用 Visual Studio 2022 社区:

#include <iostream>
#include <Windows.h>

using namespace std;

int main(void)
{
    system("mode con cols=62 lines=34");

    return 0;
}

实际上,它可以在 Windows 10 中运行。

这是Windows 11的问题吗,还是有其他办法吗?

我也尝试过这个:

#include <Windows.h>
#include <iostream>

using namespace std;

void SetConsoleSize(int width, int height)
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    
    COORD bufferSize = { (SHORT)width, (SHORT)height };
    if (!SetConsoleScreenBufferSize(hOut, bufferSize))
    {
        std::cerr << "Buffer Fail" << std::endl;
    }
    
    SMALL_RECT windowSize = { 0, 0, (SHORT)(width - 1), (SHORT)(height - 1) };
    if (!SetConsoleWindowInfo(hOut, TRUE, &windowSize))
    {
        std::cerr << "Size Fail" << std::endl;
    }
}

int main(void)
{
    SetConsoleSize(100, 50);

    cin.get();

    return 0;
}

有没有办法解决这个问题,或者有其他方法来设置控制台大小?

c++ windows winapi console windows-11
1个回答
0
投票

Windows 10 和 Windows 11 的默认终端不同,这就是您出现问题的原因。

只要提供正确的 HWND,您就可以使用

SetWindowPos
调整任何窗口的大小。

    HWND hwnd = GetConsoleWindow();
    Sleep(10);//If you execute these code immediately after the program starts, you must wait here for a short period of time, otherwise GetWindow will fail. I speculate that it may be because the console has not been fully initialized.
    HWND owner = GetWindow(hwnd, GW_OWNER);
    if (owner == NULL) {
        // Windows 10
        SetWindowPos(hwnd, nullptr, 0, 0, 500, 500, SWP_NOZORDER|SWP_NOMOVE);
    }
    else {
        // Windows 11
        SetWindowPos(owner, nullptr, 0, 0, 500, 500, SWP_NOZORDER|SWP_NOMOVE);
    }

需要注意的是,

SetWindowPos
DPI感知的影响。

© www.soinside.com 2019 - 2024. All rights reserved.