You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本获取PowerShell控制台的字体大小?

如何通过脚本获取PowerShell控制台的字体大小?

我明白你想要的是和PowerShell控制台属性里显示的完全一致的字体大小数值,之前尝试的几种方法要么找不到对应值,要么得到的是其他参数,我来帮你解决这个问题。

方法一:从注册表获取默认字体大小(需转换)

你从注册表拿到的FontSize值(比如十进制1835025,对应十六进制0x1C0011)其实是个组合值:它的低16位代表字体的像素高度,高16位代表字体的像素宽度。我们可以用位运算提取出像素高度:

# 读取注册表中的字体大小值
$fontSizeReg = (Get-ItemProperty "HKCU:\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe").FontSize
# 提取低16位得到像素高度
$pixelHeight = $fontSizeReg -band 0xFFFF
Write-Host "字体像素高度: $pixelHeight"

而控制台属性里显示的“字体大小”是字体点数(pt),如果你的系统是默认96DPI(100%缩放),可以通过公式把像素高度转换成点数:

$pointSize = [math]::Round($pixelHeight * 72 / 96)
Write-Host "对应属性显示的字体点数大小: $pointSize"

⚠️ 注意:注册表的值是控制台的默认设置,如果你在运行时临时修改了字体大小,这个值不会实时更新。

方法二:调用Windows API获取实时字体大小(更准确)

如果想获取当前正在运行的控制台的实时字体大小,$Host.UI.RawUI确实没有暴露这个属性,我们可以直接调用Windows原生API来实现。下面是一段可直接运行的脚本:

Add-Type @"
using System;
using System.Runtime.InteropServices;

public class ConsoleFontUtils {
    [StructLayout(LayoutKind.Sequential)]
    public struct CONSOLE_FONT_INFO {
        public uint nFont;
        public COORD dwFontSize;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct COORD {
        public short X;
        public short Y;
    }

    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern bool GetCurrentConsoleFont(IntPtr hConsoleOutput, bool bMaximumWindow, out CONSOLE_FONT_INFO lpConsoleCurrentFont);

    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern IntPtr GetStdHandle(int nStdHandle);
}
"@

# 获取标准输出句柄
$stdOutHandle = [ConsoleFontUtils]::GetStdHandle(-11)
$fontInfo = New-Object ConsoleFontUtils+CONSOLE_FONT_INFO
# 获取当前控制台字体信息
[ConsoleFontUtils]::GetCurrentConsoleFont($stdOutHandle, $false, [ref]$fontInfo) | Out-Null

$pixelHeight = $fontInfo.dwFontSize.Y
# 转换为对应点数(默认96DPI)
$pointSize = [math]::Round($pixelHeight * 72 / 96)

Write-Host "当前控制台字体像素高度: $pixelHeight"
Write-Host "对应属性显示的字体点数大小: $pointSize"

这段脚本通过GetCurrentConsoleFont API直接读取当前控制台的字体尺寸,转换后就能得到和属性里完全一致的数值,就算你临时修改了字体大小也能实时获取。

关于WindowsConsoleFonts模块

你提到的(Get-ConsoleFont).Size返回的是控制台窗口的缓冲区大小(宽×高),并不是字体本身的大小,所以这个模块没法帮你获取目标值。

备注:内容来源于stack exchange,提问作者Mr.Key7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:33:15