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

时间:2012-05-18 21:54:54

标签: c++ windows console width

当程序输出重定向到另一个命令或文件时,

GetConsoleScreenBufferInfo()在使用标准输出初始化时返回错误。

有没有办法获得程序运行的控制台的句柄并获得其宽度,无论程序输出是否写入控制台?

也许GetConsoleWindow()在这里是一个帮助,但我不知道如何使用它产生的句柄来获得宽度。

2 个答案:

答案 0 :(得分:4)

你的问题没有多大意义。如果重定向输出,则控制台窗口宽度根本不重要。只有显示重定向输出的程序的控制台(如果有)才重要。你不能猜测记事本的窗口大小。

但是你可以获得控制台的句柄,你需要使用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);

重定向文件中的输出:

  

OK = 1,80 x 25

答案 1 :(得分:2)

查看GetConsoleScreenBufferInfo,特别是CONSOLE_SCREEN_BUFFERsrWindow成员。