public override Dpi GetDpiForMonitor(IntPtr hMonitor) { uint dpiX, dpiY; SHCore.GetDpiForMonitor(hMonitor, MonitorDpiType.Default, out dpiX, out dpiY); return(new Dpi(dpiX, dpiY)); }
/// <summary> /// ディスプレイモニターの DPI 設定値を取得します。 /// </summary> /// <param name="hMonitor">ディスプレイモニタの HMONITOR</param> /// <param name="dpiType">DPI の種類。既定値は <see cref="MonitorDpiType.Default"/> (<see cref="MonitorDpiType.EffectiveDpi"/> と同値) です。</param> /// <returns><paramref name="hWnd"/> のウィンドウが描画されているモニターの DPI 設定値。サポートされていないシステムの場合は <see cref="Dpi.Default"/>。</returns> private static Dpi GetDpiForMonitor(IntPtr hMonitor, MonitorDpiType dpiType) { if (!IsSupported) { return(Dpi.Default); } uint dpiX = 1, dpiY = 1; SHCore.GetDpiForMonitor(hMonitor, dpiType, out dpiX, out dpiY); return(new Dpi(dpiX, dpiY)); }
public static uint GetDpi(this System.Windows.Forms.Screen screen, DpiType dpiType) { try { var monitor = User32.MonitorFromPoint(screen.Bounds.Location, User32.MONITOR_DEFAULTTONEAREST); SHCore.GetDpiForMonitor(monitor, dpiType, out var dpiX, out var _); return(dpiX); } catch (System.DllNotFoundException) { return(96); // On Windows <8, just assume scaling 100%. } }
/// <summary> /// 指定したハンドルのウィンドウが描画されているモニターの DPI 設定値を取得します。 /// </summary> /// <param name="hWnd">DPI を取得する対象の Win32 ウィンドウを示すウィンドウ ハンドル。</param> /// <param name="dpiType">DPI の種類。既定値は <see cref="MonitorDpiType.Default"/> (<see cref="MonitorDpiType.EffectiveDpi"/> と同値) です。</param> /// <returns><paramref name="hWnd"/> のウィンドウが描画されているモニターの DPI 設定値。サポートされていないシステムの場合は <see cref="Dpi.Default"/>。</returns> public static Dpi GetDpi(IntPtr hWnd, MonitorDpiType dpiType = MonitorDpiType.Default) { if (!IsSupported) { return(Dpi.Default); } var hmonitor = User32.MonitorFromWindow( hWnd, MonitorDefaultTo.MONITOR_DEFAULTTONEAREST); uint dpiX = 1, dpiY = 1; SHCore.GetDpiForMonitor(hmonitor, dpiType, ref dpiX, ref dpiY); return(new Dpi(dpiX, dpiY)); }