是否可以检查程序输出redirect到文件的控制台的宽度?

当程序输出被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_BUFFERsrWindow成员。