Обнаружение подключения или удаления внешнего дисплея в Windows 7 - PullRequest
8 голосов
/ 12 мая 2011

Есть ли какое-либо событие или уведомление, которое я могу получать или подключать каждый раз, когда внешний ЖК-монитор подключен или отключен от ноутбука с ОС Windows 7?

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

Если нет, есть ли параметр реестра или API, который я мог бы опрашиватьвремя от времени?

(я предпочитаю программировать на C + Win32 API)

ОБНОВЛЕНИЕ

Ответ Майка ниже, WM_DEVICECHANGE привел меня к RegisterDeviceNotification(), но я изо всех сил пытаюсь реализовать это до сих пор ...

ОБНОВЛЕНИЕ 2

Этот вопроспару раз задавали разные формулировки, но, на мой взгляд, еще не полностью ответили:

Ответы [ 3 ]

4 голосов
/ 20 августа 2015

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

Если вам нужно реагировать на изменения размера рабочего стола из-за добавления или удаления монитора, вы можете сделать это в обработчике этого сообщения. LPARAM дает вам новое разрешение экрана, на котором расположено окно. Обратите внимание, что это разрешение будет масштабироваться, если вы используете что-либо кроме 100% для масштабирования системного DPI, и ваша программа не с поддержкой DPI .

В качестве альтернативы используйте функцию EnumDisplayMonitors, чтобы получить разрешение экрана для каждого подключенного монитора и относительное положение мониторов на виртуальном рабочем столе. Эта функция использует значения пикселей реального устройства независимо от масштабирования DPI.

3 голосов
/ 12 мая 2011

Вы можете попробовать WM_DEVICECHANGE .Если это не сработает, запустите ваше окно и подключите к нему Spy ++, который будет регистрировать все сообщения окна, которые он получает.Затем подключите монитор и проверьте, получили ли вы какие-либо сообщения.

В качестве альтернативы вы можете опросить GetSystemMetrics () с помощью SM_CMONITORS.

0 голосов
/ 17 ноября 2015

Как сказано здесь :

Вы увидите зарегистрированные сообщения «UxdDisplayChangeMessage» и «HotplugDetected» (второе только при добавлении монитора). Вы можете использовать RegisterWindowMessage , чтобы получить идентификатор для этих сообщений.

Есть и другие сообщения, которые вы можете проверить, просто посмотрите связанный ответ.

...