Vanara/PInvoke/User32/WinUser.HighDpi.cs

95 lines
6.1 KiB
C#
Raw Normal View History

using System;
using System.Runtime.InteropServices;
namespace Vanara.PInvoke
{
public static partial class User32
{
/// <summary>Returns the system DPI.</summary>
/// <returns>The system DPI value.</returns>
/// <remarks>
/// <para>
/// The return value will be dependent based upon the calling context. If the current thread has a DPI_AWARENESS value of
/// <c>DPI_AWARENESS_UNAWARE</c>, the return value will be 96. That is because the current context always assumes a DPI of 96. For
/// any other <c>DPI_AWARENESS</c> value, the return value will be the actual system DPI.
/// </para>
/// <para>You should not cache the system DPI, but should use <c>GetDpiForSystem</c> whenever you need the system DPI value.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getdpiforsystem UINT GetDpiForSystem( );
[DllImport(Lib.User32, SetLastError = false, ExactSpelling = true)]
[PInvokeData("winuser.h", MSDNShortId = "B744EC4A-DB78-4654-B50F-C27CB7702899")]
public static extern uint GetDpiForSystem();
/// <summary>
/// Retrieves the system DPI associated with a given process. This is useful for avoiding compatibility issues that arise from
/// sharing DPI-sensitive information between multiple system-aware processes with different system DPI values.
/// </summary>
/// <param name="hProcess">The handle for the process to examine. If this value is null, this API behaves identically to GetDpiForSystem.</param>
/// <returns>The process's system DPI value.</returns>
/// <remarks>
/// The return value will be dependent based upon the process passed as a parameter. If the specified process has a DPI_AWARENESS
/// value of <c>DPI_AWARENESS_UNAWARE</c>, the return value will be 96. That is because the current context always assumes a DPI of
/// 96. For any other <c>DPI_AWARENESS</c> value, the return value will be the actual system DPI of the given process.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getsystemdpiforprocess UINT GetSystemDpiForProcess( HANDLE
// hProcess );
[DllImport(Lib.User32, SetLastError = false, ExactSpelling = true)]
[PInvokeData("winuser.h", MSDNShortId = "94236ECF-E69A-4D77-AABA-D43FE8DF8203")]
public static extern uint GetSystemDpiForProcess(HPROCESS hProcess);
/// <summary>Retrieves the specified system metric or system configuration setting taking into account a provided DPI.</summary>
/// <param name="nIndex">The system metric or configuration setting to be retrieved. See GetSystemMetrics for the possible values.</param>
/// <param name="dpi">The DPI to use for scaling the metric.</param>
/// <returns>
/// <para>If the function succeeds, the return value is nonzero.</para>
/// <para>If the function fails, the return value is zero. To get extended error information, call GetLastError.</para>
/// </returns>
/// <remarks>
/// This function returns the same result as GetSystemMetrics but scales it according to an arbitrary DPI you provide if appropriate.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getsystemmetricsfordpi int GetSystemMetricsForDpi( int
// nIndex, UINT dpi );
[DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)]
[PInvokeData("winuser.h", MSDNShortId = "E95BB417-81FA-4824-BE68-A1E3E003F8E0")]
public static extern int GetSystemMetricsForDpi(SystemMetric nIndex, uint dpi);
/// <summary>Retrieves the value of one of the system-wide parameters, taking into account the provided DPI value.</summary>
/// <param name="uiAction">
/// The system-wide parameter to be retrieved. This function is only intended for use with <c>SPI_GETICONTITLELOGFONT</c>,
/// <c>SPI_GETICONMETRICS</c>, or <c>SPI_GETNONCLIENTMETRICS</c>. See SystemParametersInfo for more information on these values.
/// </param>
/// <param name="uiParam">
/// A parameter whose usage and format depends on the system parameter being queried. For more information about system-wide
/// parameters, see the uiAction parameter. If not otherwise indicated, you must specify zero for this parameter.
/// </param>
/// <param name="pvParam">
/// A parameter whose usage and format depends on the system parameter being queried. For more information about system-wide
/// parameters, see the uiAction parameter. If not otherwise indicated, you must specify <c>NULL</c> for this parameter. For
/// information on the <c>PVOID</c> datatype, see Windows Data Types.
/// </param>
/// <param name="fWinIni">Has no effect for with this API. This parameter only has an effect if you're setting parameter.</param>
/// <param name="dpi">The DPI to use for scaling the metric.</param>
/// <returns>
/// <para>If the function succeeds, the return value is nonzero.</para>
/// <para>If the function fails, the return value is zero. To get extended error information, call GetLastError.</para>
/// </returns>
/// <remarks>
/// <para>
/// This function returns a similar result as SystemParametersInfo, but scales it according to an arbitrary DPI you provide (if
/// appropriate). It only scales with the following possible values for uiAction: <c>SPI_GETICONTITLELOGFONT</c>,
/// <c>SPI_GETICONMETRICS</c>, <c>SPI_GETNONCLIENTMETRICS</c>. Other possible uiAction values do not provide ForDPI behavior, and
/// therefore this function returns 0 if called with them.
/// </para>
/// <para>
/// For uiAction values that contain strings within their associated structures, only Unicode (LOGFONTW) strings are supported in
/// this function.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-systemparametersinfofordpi BOOL
// SystemParametersInfoForDpi( UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni, UINT dpi );
[DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)]
[PInvokeData("winuser.h", MSDNShortId = "BA460A5B-5356-43A5-B232-03E6E72D15A2")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SystemParametersInfoForDpi(SPI uiAction, uint uiParam, IntPtr pvParam, uint fWinIni, uint dpi);
}
}