C++ 检查Windows 7上是否有其他进程支持DPI

C++ 检查Windows 7上是否有其他进程支持DPI,c++,winapi,windows-7,C++,Winapi,Windows 7,如何在Windows 7上检查另一个进程是否支持dpi?我知道有IsProcessDPIAware(),但这只适用于调用进程(我不想走dll注入的路线)。 另一个选项是检查注册表中是否设置了HIGHDPIAWARE标志,但我不知道这是否可靠,我认为这不是很快 还有其他更好的选择吗?根据: 以前版本的Windows(即

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

还有其他更好的选择吗?

根据:

以前版本的Windows(即<8.1)要求您设置 整个应用程序的DPI感知。现在,新闻部的意识正在增强 绑定到单个线程、进程或窗口。这意味着 当应用程序运行时,DPI意识可能会发生变化,并且多个 windows可以有自己独立的DPI感知值

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

中有一个指向您答案的链接。这就是我看到的链接,但正如我所说的,我正在Windows 7上寻找解决方案,Windows 8.1中提供了
GetProcessDPIaware()。为什么您需要知道进程是否支持DPI?因为我正在拍摄目标进程的窗口截图,它们的大小取决于进程的DPI支持程度。但是正如zett42所提到的,您也可以使用
SetProcessDPIAware()
以编程方式设置DPI支持程度。这不会反映在注册表中。@johannestricker
SetProcessDPIAware
将进程默认DPI感知设置为系统DPI感知。并且通过API调用设置进程默认DPI感知可能会导致意外的应用程序行为。谢谢,但我仍然认为检查注册表是一个很难解决的问题。例如,用户可以在启动应用程序后更改注册表值,在这种情况下,注册表检查将返回错误结果。真的没有别的办法吗?据我所知恐怕没有。在windows 8.1之前,没有每个监视器或每个线程、每个窗口、每个进程的dpi感知级别,只有
process\u SYSTEM\u dpi\u AWARE