我编写了一段代码来减小控制台的大小。但这在 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;
}
有没有办法解决这个问题,或者有其他方法来设置控制台大小?
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感知的影响。