2

GetConsoleScreenBufferInfo()当程序输出重定向到另一个命令或文件时,使用标准输出初始化时返回错误。

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

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

4

2 回答 2

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);

重定向文件中的输出:

确定 = 1, 80 x 25

于 2012-05-18T23:54:02.917 回答
2

看看GetConsoleScreenBufferInfo,特别是srWindow成员CONSOLE_SCREEN_BUFFER

于 2012-05-18T22:00:21.233 回答