使用 WINAPI 获取 windows 上的制表符宽度?

Get tab width on windows with WINAPI?

我需要在 Windows 控制台中格式化字符完美的文本,所以我需要获取制表符大小来处理制表符。我查看了 Console functions,但它似乎不包含此类信息。

有没有办法获取选项卡大小,或者是 WIN 未公开的内容API?

如果您不想硬编码制表位宽度,可以在打印后查询光标位置\r\t。例如:

int get_tab_stop_width()
{
    int tab_stop_width = -1;
    HANDLE h = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
        NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
    if (h != INVALID_HANDLE_VALUE) {
        DWORD n;
        if (WriteConsoleW(h, L"\r\t", 2, &n, NULL)) {
            CONSOLE_SCREEN_BUFFER_INFO info;
            if (GetConsoleScreenBufferInfo(h, &info))
                tab_stop_width = info.dwCursorPosition.X;
        }
        CloseHandle(h);
    }
    return tab_stop_width;
}

这应该 return 8 在 Windows 的所有版本上,假设进程附加到控制台。