如何在WPF中编程获取Windows系统的文本缩放值
WPF 编程获取Windows系统文本缩放值的方法
Windows系统的文本缩放值本质是DPI缩放比例,对应设置面板中100%/125%/150%等选项,可通过以下两种方式实现获取:
方法1:使用WPF原生API(最简方案)
适合大多数仅需获取主屏幕或当前窗口缩放比例的场景,无需引入额外Win32依赖:
// 方式1:通过VisualTreeHelper直接读取当前窗口的DPI缩放 var dpiInfo = VisualTreeHelper.GetDpi(Application.Current.MainWindow); double scale = dpiInfo.DpiScaleX; // 1.0对应100%缩放,1.25对应125%缩放,以此类推 // 若要转成设置面板显示的百分比格式 string scaleDisplay = $"{scale * 100}%";
方法2:调用Win32 API(兼容多屏场景)
如果需要获取指定屏幕的缩放比例,或需兼容更早版本的.NET框架,可调用Win32接口实现:
// 首先导入Win32 API [DllImport("User32.dll")] private static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags); [DllImport("Shcore.dll")] private static extern int GetDpiForMonitor(IntPtr hmonitor, uint dpiType, out uint dpiX, out uint dpiY); // 调用示例:获取当前窗口所在屏幕的文本缩放值 const uint MONITOR_DEFAULTTONEAREST = 0x00000002; const uint MDT_EFFECTIVE_DPI = 0; IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle; IntPtr monitorHandle = MonitorFromWindow(windowHandle, MONITOR_DEFAULTTONEAREST); GetDpiForMonitor(monitorHandle, MDT_EFFECTIVE_DPI, out uint dpiX, out uint _); // 系统默认标准DPI为96,对应100%缩放 double textScale = dpiX / 96.0;
对应Windows设置界面参考:
内容的提问来源于stack exchange,提问作者Themelis
相关产品推荐
相关产品推荐


