windows - 检测 Windows 显示分辨率更改结束
问题描述
我正在尝试为具有以下功能的Windows开发后台实用程序:
- 为当前显示分辨率Rx存储打开的应用程序窗口的位置
- 扫描显示分辨率Rx -> Ry的任何变化(例如,与将我的笔记本电脑与/从其扩展坞对接/脱离相关)
- 等待 Windows 完成自动重新定位窗口(混乱的桌面重新配置;见下文)
- 恢复先前存储的显示分辨率Ry的窗口位置
我已经成功实现了功能 1、2 和 4。对于功能 2,我拦截了WM_DISPLAYCHANGE
事件,告诉我显示分辨率发生了变化。
分辨率发生更改后,Windows会立即自动重新定位许多(如果不是全部)窗口以满足新的显示约束。这个阶段(我称之为混乱的桌面重新配置)会持续几秒钟,并在 Windows 布局中造成真正的混乱(这就是我想要开发上述实用程序的原因)。
现在我有以下问题:
当 Windows 完成混乱的桌面重新配置阶段 (3)时,我只能应用功能 4 。但是,我还没有找到任何可接受的方法来检测此阶段何时结束。
我确实尝试通过拦截事件来观察窗口的自动重新定位EVENT_OBJECT_LOCATIONCHANGE
,然后等待最后一个发出。它几乎可以工作:当它发生时我会得到很好的通知,但是,我并不满意,因为这些事件中的每一个之间的时间间隔可以持续长达 5 秒(或者可能更长),这使得很难识别其中的最后一个通过经典的超时方法事件。目前,我已将此超时设置为 10 秒,这并不令人满意,因为我希望能够更早地检测到混乱的桌面重新配置结束,更重要的是,不能保证之后不会发生另一个此类事件超时。
在更改显示分辨率时,有没有人有解决方案来正确检测自动窗口重新定位的结束?
解决方案
推荐阅读
- cocoa - NSOutlineView 检测子项何时折叠
- java - Spring Cloud Stream 多主题事务管理
- javascript - 如何使用 Javascript 有效地确定 HTML 文档中兄弟元素的相对顺序
- aws-lambda - 无法通过用户凭据访问 api 网关
- angular - 所有观察到的 NGXS 选择器是否都会在任何状态更改时执行?
- javascript - 在等待中使用外部函数并使用回调
- android - 如何在 5 分钟后停止通知 FLAG_INSISTENT?
- sql-server - MVC 项目中的 Rdlc 报告能够切换数据库
- c# - 用于员工树形视图的 JSON
- dart - 飞镖传播运算符说“如果它不为空,请将其放入列表中”