GetConsoleScreenBufferInfo()
当程序输出重定向到另一个命令或文件时,使用标准输出初始化时返回错误。
无论程序输出是否写在控制台上,有没有办法获得程序运行的控制台的句柄并获得它的宽度?
也许GetConsoleWindow()
这里有帮助,但我不知道如何使用它产生的句柄来获取宽度。
你的问题意义不大。如果输出被重定向,那么您的控制台窗口宽度根本无关紧要。只有显示重定向输出的程序的控制台(如果有)很重要。您无法猜测记事本的窗口大小。
但是,您可以获得控制台的句柄,您需要使用 CreateFile():
HANDLE hConsole = CreateFile(L"CONOUT$",
GENERIC_READ | GENERIC_WRITE,
0, 0, OPEN_EXISTING, 0, 0);
CONSOLE_SCREEN_BUFFER_INFO info = {0};
BOOL ok = GetConsoleScreenBufferInfo(hConsole, &info);
printf("OK = %d, %d x %d\n", ok,
info.srWindow.Right - info.srWindow.Left + 1,
info.srWindow.Bottom - info.srWindow.Top + 1);
重定向文件中的输出:
确定 = 1, 80 x 25
看看GetConsoleScreenBufferInfo
,特别是srWindow
成员CONSOLE_SCREEN_BUFFER
。