первая цель сценария, для которой я не смог найти собственное решение.
Попытки и исследования того, как найти текущий размер шрифта, на данный момент:
проверка wmi c на полезное значение:
wmic path Win32_VideoController get * /format:value
Принятое решение для этого аналогичного вопроса :
for /f "tokens=3" %A in ('reg query "HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics" /v AppliedDPI') do echo %A
- Это решение возвращает тот же результат независимо от размера шрифта на моих машинах - 0x12
Поиск вопросов и ответов здесь, на stackoverflow
Поиск по Dostips
Использование внешнего исполняемого файла для изменения размера шрифта (BG.exe)
- Не все сценарии, в которых я это использую, гарантируют пользователям необходимость загрузки вспомогательных исполняемых файлов
Выполнение сценария предназначено для систем Windows 10 поддержка escape-кодов ASCII
Контекст, в котором требуется текущий размер шрифта:
Я разработал процедуру для управления размер и положение консоли, которые остаются точными при разных разрешениях, однако в настоящее время они зависят от значений для максимальных строк и столбцов на основе предполагаемого размера шрифта 16x8
С надежными средствами определения размера шрифта я могу отказаться исходя из этого предположения и сформулируйте позиционирование, используя соотношение между фактическим размером шрифта, максимальным количеством строк / столбцов и разрешением экрана. Мне все еще нужно определить вышеупомянутые отношения - если кто-то уже знает это, не стесняйтесь поделиться.
::: { Subroutine to process output of wmic command into usable variables for screen dimensions (resolution)
::: - Formula based on Consolas 16x8 Font
:ChangeConsole <Lines> <Columns> <Label to Resume From> <If a 4th parameter is Defined, Aligns screen at top left>
::: - Get screen Dimensions
For /f "delims=" %%# in ('"wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution /format:value"') do (
Set "%%#">nul
)
::: - Calculation of X axis relative to screen resolution and console size. Resolution scales to Max Columns ~ 165
Set /A XresScale=CurrentHorizontalResolution / 165
Set /A HorzCentre=CurrentHorizontalResolution / 2
Set /A CentreX= ( HorzCentre - ( ( %~2 * XresScale ) / 2 ) ) - 8
::: - Calculation of Y axis relative to screen resolution and console size. Resolution scales to Max Lines ~ 43
Set /A YresScale=CurrentVerticalResolution / 43
Set /A VertCentre=CurrentVerticalResolution / 2
Set /A CentreY=VertCentre - ( ( %~1 * YresScale ) / 2 )
::: - Optional 4th parameter can be used to align console at top left of screen instead of screen centre
If Not "%~4"=="" (Set /A CentreY=0,CentreX=-8)
::: - Creates a batch file to reopen the main script using Call with parameters to define properties for console change and the label to resume from.
(
Echo.@Mode Con: lines=%~1 cols=%~2
Echo.@Title %ProgName%
Echo.@Call "%AlignFile%" "%~1" "%~2" "%~3" "%AlignFile%"
)>"%temp%\ChangeConsole.bat"
::: - .Vbs script creation
(
Echo.Set objWMIService = GetObject^("winmgmts:\\.\root\cimv2"^)
Echo.Set objConfig = objWMIService.Get^("Win32_ProcessStartup"^)
Echo.objConfig.SpawnInstance_
Echo.objConfig.X = %CentreX%
Echo.objConfig.Y = %CentreY%
Echo.Set objNewProcess = objWMIService.Get^("Win32_Process"^)
Echo.intReturn = objNewProcess.Create^("%temp%\ChangeConsole.bat", Null, objConfig, intProcessID^)
)>"%temp%\Consolepos.vbs"
::: - .Vbs Starts the companion batch script to Change Console properties, ends the parent.
Start "" "%temp%\Consolepos.vbs" & Exit
::: }
Демонстрация вышеуказанной процедуры