setProcessDpiAwareness 函数 (shellscalingapi.h)

设置进程默认 DPI 感知级别。 这等效于使用相应的DPI_AWARENESS_CONTEXT值调用 SetProcessDpiAwarenessContext

注意

建议通过应用程序清单(而不是 API 调用)设置进程默认 DPI 感知。 有关详细信息 ,请参阅设置进程的默认 DPI 感知 。 通过 API 调用设置进程默认 DPI 感知可能会导致意外的应用程序行为。

语法

HRESULT SetProcessDpiAwareness(
  [in] PROCESS_DPI_AWARENESS value
);

参数

[in] value

要设置的 DPI 感知值。 可能的值来自 PROCESS_DPI_AWARENESS 枚举。

返回值

此函数返回以下值之一。

返回代码 说明
S_OK
已成功设置应用的 DPI 感知。
E_INVALIDARG
传入的值无效。
E_ACCESSDENIED
通过之前调用此 API 或通过应用程序 (.exe) 清单来设置 DPI 感知。

注解

以前版本的 Windows 对于整个应用程序只有一个 DPI 感知值。 对于这些应用程序,建议在清单中设置 DPI 感知值,如 PROCESS_DPI_AWARENESS 中所述。 根据该建议,不应使用 SetProcessDpiAwareness 更新 DPI 感知。 事实上,在设置 DPI 感知一次后,将来对此 API 的调用将失败。 现在 DPI 感知已绑定到线程而不是应用程序,可以使用此方法更新 DPI 感知。 但是,请考虑改用 SetThreadDpiAwarenessContext

重要说明  

对于较旧的应用程序,强烈建议不要使用 SetProcessDpiAwareness 来设置应用程序的 DPI 感知。 相反,应在应用程序清单中声明应用程序的 DPI 感知。 有关 DPI 感知值以及如何在清单中设置它们的详细信息,请参阅 PROCESS_DPI_AWARENESS

 
在调用依赖于 dpi 感知的任何 API 之前,必须调用此 API。 这是建议使用应用程序清单而不是 SetProcessDpiAwareness API 的部分原因。 为应用设置 API 感知后,以后对此 API 的任何调用都将失败。 无论是在清单中设置 DPI 感知还是使用此 API,都是如此。

如果未设置 DPI 感知级别,则默认值为 PROCESS_DPI_UNAWARE

要求

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

另请参阅

PROCESS_DPI_AWARENESS

SetThreadDpiAwarenessContext

设置进程的默认 DPI 感知