getDpiForMonitor 函数 (shellscalingapi.h)

查询显示器的每英寸点数 (dpi) 。

语法

HRESULT GetDpiForMonitor(
  [in]  HMONITOR         hmonitor,
  [in]  MONITOR_DPI_TYPE dpiType,
  [out] UINT             *dpiX,
  [out] UINT             *dpiY
);

参数

[in] hmonitor

正在查询的监视器的句柄。

[in] dpiType

正在查询的 DPI 的类型。 可能的值来自 MONITOR_DPI_TYPE 枚举。

[out] dpiX

沿 X 轴的 DPI 值。 此值始终引用水平边缘,即使在屏幕旋转时也是如此。

[out] dpiY

沿 Y 轴的 DPI 值。 此值始终引用垂直边缘,即使在旋转屏幕时也是如此。

返回值

此函数返回以下值之一。

返回代码 说明
S_OK
函数成功返回指定监视器的 X 和 Y DPI 值。
E_INVALIDARG
传入的句柄、DPI 类型或指针无效。

注解

此 API 不感知 DPI,如果调用线程按监视器感知 DPI,则不应使用此 API。 有关此 API 的 DPI 感知版本,请参阅 GetDpiForWindow

调用 GetDpiForMonitor 时,将接收不同的 DPI 值,具体取决于调用应用程序的 DPI 感知。 DPI 感知是应用程序级属性,通常在应用程序清单中定义。 有关 DPI 感知值的详细信息,请参阅 PROCESS_DPI_AWARENESS。 下表根据应用程序的 PROCESS_DPI_AWARENESS 值指示了结果有何不同。

PROCESS_DPI_UNAWARE 96,因为应用不知道任何其他缩放因素。
PROCESS_SYSTEM_DPI_AWARE 一个设置为系统 DPI 的值,因为应用假定所有应用程序都使用系统 DPI。
PROCESS_PER_MONITOR_DPI_AWARE 用户为该显示器设置的实际 DPI 值。
 

*dpiX*dpiY 的值相同。 只需记录其中一个值即可确定 DPI 并做出适当的响应。

当MONITOR_DPI_TYPE MDT_ANGULAR_DPIMDT_RAW_DPI时,返回的 DPI 值不包括用户在 控制面板 中使用桌面缩放替代滑块控件对 DPI 所做的任何更改。

有关 控制面板 中的 DPI 设置的详细信息,请参阅在Windows 8.1 预览版编写 DPI-Aware 桌面应用程序白皮书。

要求

   
最低受支持的客户端 Windows 8.1 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 R2 [仅限桌面应用]
目标平台 Windows
标头 shellscalingapi.h
Library Shcore.lib
DLL Shcore.dll

另请参阅

PROCESS_DPI_AWARENESS