如何在 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 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?