如何识别显示器数量、位置或分辨率发生变化?

4
我正在制作一个需要检测显示器配置更改的东西。这包括监视器的添加/删除,监视器位置移动(相对于主屏幕),或者当监视器分辨率发生变化时。最理想的方式是捕获一些窗口消息,如果有的话,当此类事件发生时触发。这些信息将用于在任何给定时间记录显示器大小/位置的实时记录。例如,当监视器的分辨率增加时,我的应用程序将立即捕获并进行自己的调整以适应此更改。我如何捕捉这些事件?
我还试图避免使用VCL(例如Vcl.Forms.Screen.MonitorCount),这就是为什么我更喜欢捕获Windows消息的原因。
1个回答

11
我能想到的最明显的消息是 WM_DISPLAYCHANGE ,至少在分辨率改变时会发送。

3
当你需要检测新信息(如位置、大小、数量等)时,可以使用EnumDisplayMonitors。+1 - Ken White
2
或者重新创建全局的 Screen 变量:Screen.Free; Screen := TScreen.Create(nil); - Ondrej Kelle
1
新版本的 Delphi(De 10.2)提供了方法 Screen.UpdateDisplayInformation,因此您无需重新创建屏幕对象。 - Schneider Infosystems Ltd
@SchneiderInfosystemsLtd - UpdateDisplayInformation 仅适用于 FMX。 - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接