Как найти минимальную ширину буфера экрана в PowerShell?
Я могу использовать $host.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Равуи.MaxPhysicalWindowSize.Ширина чтобы получить максимальную ширину (то есть количество столбцов) для окна командной строки PowerShell, и установка размера окна командной строки PowerShell хорошо документированы, но минимальная ширина буфера, кажется, различается между машинами. На одной машине было 13, а на другой-14. Я могу установить минимальную высоту и ширину окна на 1, а минимальная высота буфера также может быть 1.
Кто-нибудь знает, как я могу получить этот минимальный буфер значение ширины программно (без просто пробовать значения и ловить исключения!)
2 ответа:
Поскольку параметр
$host.UI.RawUI.BufferSize
влияет на буфер экрана консоли ( Командная строка -> свойства -> макет -> размер буфера экрана изменяется при изменении$host.UI.RawUI.BufferSize
), он имеет те же ограничения на размер буфера, что и экран консоли.Как мы можем прочитать здесь, указанные размеры для размера буфера не могут быть меньше минимального размера, разрешенного системой. Этот минимум зависит от текущего размера шрифта для консоли (выбранного пользователем) и SM_CXMIN и значения SM_CYMIN, возвращаемые функциейGetSystemMetrics .
Одним из следствий этого является то, что чем больше Шрифт экрана консоли, тем меньше размер буфера.
В качестве примера: вот как получить минимальную ширину экрана консоли. Я П/вызова функции getsystemmetrics от библиотека user32.dll с использованием этой расширенной функции (New-PInvoke by Joel Bennett).
$SM_CXMIN =28 # "The minimum width of a window, in pixels." enum value New-PInvoke -Library User32.dll -Signature "int GetSystemMetrics(uint Metric)" GetSystemMetrics $SM_CXMIN # returns 132 on my system
Для получения размера шрифта, используемого экраном консоли буфер, попробуйте GetConsoleFontSize из kernel32.файл DLL.
Примечание:
Значение, возвращаемое GetSystemMetrics $SM_CXMIN, - это общая ширина (включая границы) экрана консоли.