【发布时间】:2023-03-05 18:39:01
【问题描述】:
我无法找到自己的解决方案的第一个脚本目标。
目前关于如何查找当前字体大小的尝试和研究:
-
检查 wmic 是否有可用值:
wmic path Win32_VideoController get * /format:value -
this similar question 的公认解决方案:
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)
- 并非我在其中使用的所有脚本都保证用户需要下载支持的可执行文件
脚本执行适用于支持 ASCII 转义码的 Windows 10 系统
需要当前字体大小的上下文:
我开发了一个用于控制控制台大小和位置的例程,它在不同的分辨率下保持准确,但它目前取决于基于假定字体大小 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
::: }
【问题讨论】:
-
程序就是这样做的 docs.microsoft.com/en-us/windows/console/getconsolefontsize 你可以从 powershell、VB.NET 或 C# 中调用它。
-
知道窗口大小会有帮助吗?例如
C:\WINDOWS\system32>"C:\Users\User\Desktop\Bat+Vbs\GetWindowRect\GetWindowRect.exe"返回0 0 1087 643。 -
如果你有兴趣,我修改了这个程序winsourcecode.blogspot.com/2020/01/… 以使用当前控制台窗口(因为你输入的内容成为控制台标题的一部分,所以你会转圈)如果有用的话?
-
如果您查看我linked to 的演示,您会发现我已经能够控制窗口大小、位置和窗口内文本的对齐方式。它只是确定我需要确定的字体大小,因为字体大小的任何变化都会改变给定屏幕分辨率的最大列和行——它们之间的关系是对齐计算的基础。我仍在尝试使用您最初链接的内容,希望能找到一个 powershell 解决方案,但是,由于我对 powershell 不熟悉,可能需要一段时间。
标签: batch-file cmd