【问题标题】:Check if another process is DPI aware on Windows 7在 Windows 7 上检查另一个进程是否支持 DPI
【发布时间】:2019-09-28 01:20:07
【问题描述】:

如何在 Windows 7 上检查另一个进程是否支持 dpi?我知道有IsProcessDPIAware(),但这仅适用于调用进程(我宁愿不走 dll 注入的路线)。 另一种选择是检查注册表中是否设置了HIGHDPIAWARE 标志,但我不知道这是否可靠,我认为它不是很快!?

还有其他更好的选择吗?

【问题讨论】:

  • documentation of IsProcessDPIAware 中确实有一个指向您的答案的链接。这是GetProcessDpiAwareness
  • 我看到了那个链接,但正如我所说,我正在寻找 Windows 7 上的解决方案,GetProcessDpiAwareness() 可从 Windows 8.1 获得。
  • 查询任何注册表值或任何其他静态数据肯定不可靠,因为 DPI 感知可以通过SetProcessDPIAware() 动态更改。 为什么您需要知道进程是否支持 DPI?
  • 因为我正在截取目标进程的窗口,并且它们的大小根据进程的 dpi 感知而不同。

标签: c++ winapi windows-7


【解决方案1】:

根据doc

以前版本的 Windows(即

在以前的 Windows 版本中,整个应用程序的 DPI 值只设置一次。 所以检查Window 7中HIGHDPIAWARE标志的注册表设置是否可靠,这是检查另一个进程的DPI Awareness的方法。

【讨论】:

  • 但正如 zett42 所提到的,也可以使用SetProcessDPIAware() 以编程方式设置 DPI 感知。这不会反映在注册表中。
  • @JohannesStricker SetProcessDPIAware 将进程默认 DPI 感知设置为系统 DPI 感知。通过 API 调用设置进程默认的 DPI 感知可能会导致意外的应用程序行为。
  • 谢谢,但我仍然认为检查注册表是一个 hacky 解决方案。例如,用户可以在启动应用程序后更改注册表值,在这种情况下,注册表检查将返回错误结果。真的没有其他办法了吗?
  • 恐怕不是据我所知。在 windows 8.1 之前,没有 per-monitor 或 per-thread, per-window, per-process dpi 感知级别,只有PROCESS_SYSTEM_DPI_AWARE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 2012-06-09
  • 2017-04-19
  • 2011-12-08
相关资源
最近更新 更多