2012-06-12 5 views
4

Я создаю что-то, что необходимо определить, когда ситуация меняется с конфигурацией монитора. Это включает добавление/удаление Монитора, перемещение монитора (по сравнению с основным экраном) или изменение разрешения монитора. Наиболее идеальным способом было бы поймать некоторые сообщения Windows, если они есть, которые срабатывают при возникновении таких событий. Эта информация будет использоваться для ведения постоянной записи размеров/позиций монитора в любой момент времени. Например, когда разрешение монитора увеличивается, мое приложение сразу поймает это и внесет собственные корректировки для изменения. Как поймать эти события?Как узнать, когда число, положение или разрешение мониторов изменилось?

Я также пытаюсь избежать использования VCL (например, Vcl.Forms.Screen.MonitorCount), поэтому я предпочитаю использовать Windows Message.

ответ

11

Наиболее очевидное сообщение, о котором я могу думать, это WM_DISPLAYCHANGE, который отправляется, по крайней мере, при изменении разрешения.

+3

В этот момент вы можете использовать [EnumDisplayMonitors] (http://msdn.microsoft.com/en-us/library/dd162610%28v=VS.85%29.aspx) для обнаружения новой информации, такой как позиция, размер, счет и т. д. +1. –

+2

или просто воссоздайте глобальную переменную 'Screen':' Screen.Free; Экран: = TScreen.Create (nil); ' –