使用 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 的所有版本上,假设进程附加到控制台。
我需要在 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 的所有版本上,假设进程附加到控制台。