¿Cómo reconocer cuándo ha cambiado el número, la posición o la resolución de los monitores? [duplicar]

Estoy construyendo algo que necesita detectar cuando las cosas cambian con la configuración del monitor. Esto incluye el Monitor agregado/eliminado, la posición del Monitor movida (en comparación con la pantalla principal) o cuando la resolución del Monitor ha cambiado. La forma más ideal sería capturar algunos mensajes de Windows, si los hay, que se activan cuando ocurren tales eventos. Esta información se utilizará para mantener un registro en tiempo real de los tamaños/posiciones del monitor en un momento dado. Por ejemplo, cuando se aumenta la resolución de un monitor, mi aplicación lo detectará de inmediato y hará sus propios ajustes para adaptarse al cambio. ¿Cómo capturo estos eventos?

También estoy tratando de evitar el uso de VCL (como Vcl.Forms.Screen.MonitorCount), por lo que prefiero captar un mensaje de Windows.

preguntado el 12 de junio de 12 a las 21:06

1 Respuestas

El mensaje más obvio que se me ocurre es WM_DISPLAYCHANGE que se envía, al menos, cuando se cambia la resolución.

Respondido el 12 de junio de 12 a las 21:06

En qué punto puedes usar EnumDisplayMonitores para detectar nueva información como posición, tamaño, conteo, etc. +1. - Ken White

o simplemente recrear el global Screen variable: Screen.Free; Screen := TScreen.Create(nil); - ondrej kelle

Las versiones más nuevas de Delphi (De 10.2) ofrecen el método Screen.UpdateDisplayInformation por lo que no necesita volver a crear el objeto de pantalla - Schneider Infosystems Ltd

@SchneiderInfosystemsLtd - UpdateDisplayInformation solo está disponible para FMX. - Desbordamiento del servidor

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.