如何识别监视器的数量,位置或分辨率何时发生变化?

Jer*_*dge 4 delphi multiple-monitors windows-messages

我正在构建一些需要在监视器配置发生变化时进行检测的东西.这包括添加/删除监视器,移动监视器位置(与主屏幕比较),或监视器分辨率已更改.最理想的方法是捕获一些Windows消息(如果有的话),这些消息在发生此类事件时触发.此信息将用于在任何给定时间保持监视器大小/位置的实时记录.例如,当显示器的分辨率增加时,我的应用程序将立即捕获它并进行自己的调整以适应更改.我如何捕捉这些事件?

我也试图避免使用VCL(例如Vcl.Forms.Screen.MonitorCount),这就是我喜欢捕获Windows消息的原因.

And*_*and 11

我能想到的最明显的信息WM_DISPLAYCHANGE是至少在分辨率发生变化时发送的信息.

  • 此时,您可以使用[EnumDisplayMonitors](http://msdn.microsoft.com/en-us/library/dd162610%28v=VS.85%29.aspx)来检测位置,大小,计数等新信息.等等.+1. (3认同)
  • 或者只是重新创建全局`Screen`变量:`Screen.Free; 屏幕:= TScreen.Create(nil);` (2认同)