/// <summary> /// Tries to compare two DPIawareness context values. Return true if they were equal. /// Return false when they are not equal or underlying OS does not support this API. /// </summary> /// <returns>true/false</returns> public static bool TryFindDpiAwarenessContextsEqual(DpiAwarenessContext dpiContextA, DpiAwarenessContext dpiContextB) { if (ApiHelper.IsApiAvailable(ExternDll.User32, "AreDpiAwarenessContextsEqual")) { return(AreDpiAwarenessContextsEqual(dpiContextA, dpiContextB)); } return(false); }
/// <summary> /// Gets the DPI awareness. /// </summary> /// <returns>The thread's/process' current HighDpi mode</returns> internal static HighDpiMode GetWinformsApplicationDpiAwareness() { // For Windows 10 RS2 and above if (ApiHelper.IsApiAvailable(ExternDll.User32, nameof(CommonUnsafeNativeMethods.GetThreadDpiAwarenessContext))) { DpiAwarenessContext dpiAwareness = CommonUnsafeNativeMethods.GetThreadDpiAwarenessContext(); if (CommonUnsafeNativeMethods.TryFindDpiAwarenessContextsEqual(dpiAwareness, DpiAwarenessContext.DPI_AWARENESS_CONTEXT_SYSTEM_AWARE)) { return(HighDpiMode.SystemAware); } if (CommonUnsafeNativeMethods.TryFindDpiAwarenessContextsEqual(dpiAwareness, DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNAWARE)) { return(HighDpiMode.DpiUnaware); } if (CommonUnsafeNativeMethods.TryFindDpiAwarenessContextsEqual(dpiAwareness, DpiAwarenessContext.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) { return(HighDpiMode.PerMonitorV2); } if (CommonUnsafeNativeMethods.TryFindDpiAwarenessContextsEqual(dpiAwareness, DpiAwarenessContext.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE)) { return(HighDpiMode.PerMonitor); } if (CommonUnsafeNativeMethods.TryFindDpiAwarenessContextsEqual(dpiAwareness, DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED)) { return(HighDpiMode.DpiUnawareGdiScaled); } } // For operating systems windows 8.1 to Windows 10 redstone 1 version. else if (ApiHelper.IsApiAvailable(ExternDll.ShCore, nameof(SafeNativeMethods.GetProcessDpiAwareness))) { SafeNativeMethods.GetProcessDpiAwareness(IntPtr.Zero, out CAPS.PROCESS_DPI_AWARENESS processDpiAwareness); switch (processDpiAwareness) { case CAPS.PROCESS_DPI_AWARENESS.PROCESS_DPI_UNAWARE: return(HighDpiMode.DpiUnaware); case CAPS.PROCESS_DPI_AWARENESS.PROCESS_SYSTEM_DPI_AWARE: return(HighDpiMode.SystemAware); case CAPS.PROCESS_DPI_AWARENESS.PROCESS_PER_MONITOR_DPI_AWARE: return(HighDpiMode.PerMonitor); } } // For operating systems windows 7 to windows 8 else if (ApiHelper.IsApiAvailable(ExternDll.User32, nameof(SafeNativeMethods.IsProcessDPIAware))) { return(SafeNativeMethods.IsProcessDPIAware() ? HighDpiMode.SystemAware : HighDpiMode.DpiUnaware); } // We should never get here, except someone ported this with force to < Windows 7. return(HighDpiMode.DpiUnaware); }
/// <summary> /// Enters a scope during which the current thread's DPI awareness context is set to /// <paramref name="awareness"/> /// </summary> /// <param name="awareness">The new DPI awareness for the current thread</param> /// <returns>An object that, when disposed, will reset the current thread's /// DPI awareness to the value it had when the object was created.</returns> public static IDisposable EnterDpiAwarenessScope(DpiAwarenessContext awareness) { return(new DpiAwarenessScope(awareness)); }
/// <summary> /// Tries to compare two DPIawareness context values. Return true if they were equal. /// Return false when they are not equal or underlying OS does not support this API. /// </summary> /// <returns>true/false</returns> public static bool TryFindDpiAwarenessContextsEqual(DpiAwarenessContext dpiContextA, DpiAwarenessContext dpiContextB) { if (OsVersion.IsWindows10_1607OrGreater) { return(AreDpiAwarenessContextsEqual(dpiContextA, dpiContextB)); } return(false); }
public static extern bool IsValidDpiAwarenessContext(DpiAwarenessContext dpiAwarenessContext);
/// <summary> /// Tries to compare two DPIawareness context values. Return true if they were equal. /// Return false when they are not equal or underlying OS does not support this API. /// </summary> /// <returns>true/false</returns> public static bool TryFindDpiAwarenessContextsEqual(DpiAwarenessContext dpiContextA, DpiAwarenessContext dpiContextB) { // User.32 AreDpiAwarenessContextsEqual API returns false when sent custom values like DPI_AWARENESS_CONTEXT_UNSPECIFIED, but it is true when both are equal to the same custom value. if (dpiContextA == DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNSPECIFIED && dpiContextB == DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNSPECIFIED) { return(true); } if (ApiHelper.IsApiAvailable(ExternDll.User32, "AreDpiAwarenessContextsEqual")) { return(AreDpiAwarenessContextsEqual(dpiContextA, dpiContextB)); } return(false); }
public static extern DpiAwareness GetAwarenessFromDpiAwarenessContext(DpiAwarenessContext dpiAwarenessContext);
/// <summary> /// Tries to compare two DPIawareness context values. Return true if they were equal. /// Return false when they are not equal or underlying OS does not support this API. /// </summary> /// <returns>true/false</returns> public static bool TryFindDpiAwarenessContextsEqual(DpiAwarenessContext dpiContextA, DpiAwarenessContext dpiContextB) { if (dpiContextA == DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNSPECIFIED && dpiContextB == DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNSPECIFIED) { return(true); } if (OsVersion.IsWindows10_1607OrGreater) { return(AreDpiAwarenessContextsEqual(dpiContextA, dpiContextB)); } return(false); }
public static extern bool SetProcessDpiAwarenessContext(DpiAwarenessContext dpiAwarenessContext);
public static extern DpiAwarenessContext SetThreadDpiAwarenessContext(DpiAwarenessContext dpiAwarenessContext);
/// <summary> /// Tries to compare two DPIawareness context values. Return true if they were equal. /// Return false when they are not equal or underlying OS does not support this API. /// </summary> /// <returns>true/false</returns> public static bool TryFindDpiAwarenessContextsEqual(DpiAwarenessContext dpiContextA, DpiAwarenessContext dpiContextB) { if (dpiContextA == DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNSPECIFIED && dpiContextB == DpiAwarenessContext.DPI_AWARENESS_CONTEXT_UNSPECIFIED) { return(true); } if (ApiHelper.IsApiAvailable(ExternDll.User32, nameof(CommonUnsafeNativeMethods.AreDpiAwarenessContextsEqual))) { return(AreDpiAwarenessContextsEqual(dpiContextA, dpiContextB)); } return(false); }
/// <summary> /// Initializes a new instance of the <see cref="DpiAwarenessContextHandle"/> class. /// </summary> /// <param name="dpiAwarenessContext"><see cref="DpiAwarenessContext"/> value.</param> public DpiAwarenessContextHandle(DpiAwarenessContext dpiAwarenessContext) : this(new IntPtr((int)dpiAwarenessContext)) { }
/// <inheritdoc/> public bool Equals([AllowNull] DpiAwarenessContext other) => this.Equals(WellKnownDpiAwarenessContextValues[other]);
internal static extern DpiAwarenessContext SetThreadDpiAwarenessContext(DpiAwarenessContext dpiContext);
public static extern uint GetDpiFromDpiAwarenessContext(DpiAwarenessContext dpiAwarenessContext);
internal static extern bool AreDpiAwarenessContextsEqual(DpiAwarenessContext dpiContextA, DpiAwarenessContext dpiContextB);
internal static extern bool SetProcessDpiAwarenessContext(DpiAwarenessContext dpiFlag);