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

技术问询:如何通过VBA获取Windows系统显示字体大小(100%/125%)

获取Windows显示缩放比例的VBA解决方案

嘿,这个问题我帮不少做桌面程序的开发者解决过——确实,不同用户的Windows显示缩放(就是你说的100%小号、125%中等这类设置)很容易搞乱界面布局,尤其是数据加载工具这种需要精准交互的程序。好在我们可以通过调用Windows API直接获取这个缩放比例,下面是具体的VBA实现:

首先,你需要在模块的最顶部声明必要的API函数(注意不能放在子程序内部):

Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal nIndex As Long) As Long
Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hdc As LongPtr) As Long

Const LOGPIXELSX = 88 ' 用于获取水平方向每英寸像素数的常量

接下来写一个自定义函数,用来计算并返回当前的显示缩放百分比:

Function GetDisplayScalePercentage() As Integer
    Dim hdc As LongPtr
    Dim currentDPI As Long
    Dim defaultDPI As Long
    
    defaultDPI = 96 ' Windows默认DPI值,对应100%缩放比例
    hdc = GetDC(0) ' 获取桌面窗口的设备上下文
    currentDPI = GetDeviceCaps(hdc, LOGPIXELSX) ' 获取当前系统的水平DPI值
    ReleaseDC 0, hdc ' 释放设备上下文,避免内存泄漏
    
    ' 计算缩放百分比并取整返回
    GetDisplayScalePercentage = Round((currentDPI / defaultDPI) * 100, 0)
End Function

你可以用下面的测试子程序验证效果:

Sub TestDisplayScale()
    MsgBox "当前显示缩放比例为: " & GetDisplayScalePercentage() & "%", vbInformation, "缩放信息"
End Sub

额外说明:

  • 这个方案兼容Windows 7及以上所有版本,包括Windows 10/11的多显示器场景(返回主显示器的缩放比例)。
  • 如果你的程序只运行在32位Office环境下,可以去掉代码里的PtrSafe关键字,同时把LongPtr替换成Long。
  • 获取到缩放比例后,你就可以针对性地调整程序控件大小、字体尺寸,让界面在不同缩放设置下都能正常适配。

内容的提问来源于stack exchange,提问作者Tiffany

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:22:43