当程序输出被redirect到另一个命令或文件时, 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, %dx %d\n", ok, info.srWindow.Right - info.srWindow.Left + 1, info.srWindow.Bottom - info.srWindow.Top + 1);
在重定向的文件中输出:
OK = 1,80 x 25
看看GetConsoleScreenBufferInfo
,特别是CONSOLE_SCREEN_BUFFER
的srWindow
成员。