//获取系统缩放比例 public static float GetSystemScale() { //1. 当用户使用默认方法设置缩放时(更改文本、应用等项目的大小), // 应该使用GetDeviceCaps(DESKTOPHORZRES)/GetDeviceCaps(HORZRES)获得缩放比例 //2. 当用户使用高级模式中的自定义缩放时(高级缩放设置), // 应该使用GetDeviceCaps(LOGPIXELSX)再除以0.96(再除以100,因为算出来的数字是百分比) //3. 经验证,Win10中上述两种情况下,第一种计算方法总能获取到正确的系统缩放比例 var systemScale = 1.0f; var screenDc = Win32Funcs.GetDcWrapper(IntPtr.Zero); var dpiA = Win32Funcs.GetDeviceCapsWrapper(screenDc, Win32Consts.DESKTOPHORZRES) * 1.0f / Win32Funcs.GetDeviceCapsWrapper(screenDc, Win32Consts.HORZRES); var dpiB = Win32Funcs.GetDeviceCapsWrapper(screenDc, Win32Consts.LOGPIXELSX) / 0.96f / 100f; const float tolerance = 0.000001f; if (Math.Abs(dpiA - 1f) < tolerance) { systemScale = dpiB; } else if (Math.Abs(dpiB - 1f) < tolerance) { systemScale = dpiA; } else if (Math.Abs(dpiA - dpiB) < tolerance) { systemScale = dpiA; } else { //Error } Win32Funcs.ReleaseDcWrapper(IntPtr.Zero, screenDc); return(systemScale); }