如何在 Process_System_DPI_Aware 中获得多显示器分辨率
Posted
技术标签:
【中文标题】如何在 Process_System_DPI_Aware 中获得多显示器分辨率【英文标题】:How to get multi-monitor resolution in Process_System_DPI_Aware 【发布时间】:2015-05-09 06:59:40 【问题描述】:我正在为 Firefox 制作插件。 Firefox 设置为Process_System_DPI_Aware
。我有显示器的手柄,是否可以得到正确的显示器?
到目前为止,我尝试的所有方法都给了我主显示器的 DPI。
我想使用LogicalToPhysicalPointForPerMonitorDPI
,因为它说它应该可以工作,但是我没有提供给该功能的窗口。第二台显示器上没有窗口。我正在尝试截取那个桌面的屏幕截图。
谢谢
【问题讨论】:
【参考方案1】:您正在使用每个显示器的 dpi 设置,但您的进程不支持每个显示器的 dpi。因此,您的辅助监视器具有 dpi 虚拟化。
您应该从每个显示器的 dpi 感知进程中执行您的屏幕截图代码。
【讨论】:
感谢@David,但我无法更改它,我正在为 Firefox 编写一个插件:( 确实如此。所以你需要一个新的流程。 啊,用EnumDisplaySettings
来获得屏幕宽度怎么样?
没关系。您的代码在不支持每个监视器 DPI 的进程中运行,因此您为辅助监视器检索的任何设置都将被虚拟化。您需要将代码移动到支持每个监视器 DPI 的单独进程。
EnumDisplaySettings
确实给了我正确的尺寸但是我无法获得 DPI/比例因子 :(【参考方案2】:
您可以创建不可见窗口,使用 EnumDisplayMonitors 枚举监视器,使用 GetMonitorInfo 获取虚拟化矩形,为每个监视器移动和调整不可见窗口全屏大小,以及使用 LogicalToPhysicalPointForPerMonitorDPI 获取真实监视器矩形。
【讨论】:
以上是关于如何在 Process_System_DPI_Aware 中获得多显示器分辨率的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?