tecla segundo puedo proyector proyectar para pantalla laptop externo extender duplicar detecta cómo conectar winapi events notifications external-display hotplugging

winapi - segundo - windows 7 no detecta monitor externo



Detecta la pantalla externa conectada o eliminada en Windows 7 (3)

¿Hay algún evento o notificación que pueda recibir o enganchar cada vez que se enchufa o desenchufa un monitor LCD externo desde una computadora portátil con Windows 7?

La computadora portátil detecta esto y cambia mi pantalla a la pantalla externa y viceversa con ciertos tipos de cambio de tamaño o reposicionamiento, pero ¿está expuesto esto por el sistema operativo para que las aplicaciones puedan proporcionar un controlador, adjuntar un script, etc.?

Si no, ¿hay alguna configuración de registro o API que pueda sondear de vez en cuando?

(Prefiero programar C + Win32 API)

ACTUALIZAR

La respuesta de Mike a continuación, WM_DEVICECHANGE me llevó a RegisterDeviceNotification() , pero estoy luchando por implementarlo hasta ahora ...

ACTUALIZACIÓN 2

Esta pregunta ha sido formulada con diferentes palabras un par de veces, pero aún no está completamente respondida en mi opinión:


Puedes probar WM_DEVICECHANGE . Si eso no funciona, ejecuta tu ventana y adjunta Spy ++ que registrará todos los mensajes de ventana que recibe. Luego, conecte su monitor y verifique si recibió algún mensaje.

Alternativamente, puede sondear GetSystemMetrics () con SM_CMONITORS.


Según este artículo, Windows envía el mensaje WM_DISPLAYCHANGE cuando cambia la resolución de la pantalla y también cuando se agrega o elimina una pantalla.

Si necesita reaccionar ante cambios en el tamaño del escritorio debido a la adición o eliminación del monitor, puede hacerlo en el controlador de este mensaje. El LPARAM le ofrece la nueva resolución de la pantalla en la que se encuentra la ventana. Tenga en cuenta que esta resolución se escalará si usa cualquier otra cosa que no sea 100% para la escala de DPI del sistema y su programa no tenga en cuenta el DPI .

Alternativamente, use la función EnumDisplayMonitors para obtener la resolución de la pantalla para cada monitor conectado y las posiciones relativas de los monitores en el escritorio virtual. Esta función utiliza los valores reales de píxel del dispositivo independientemente de la escala de PPP.


Como dije aquí :

Verá los mensajes registrados "UxdDisplayChangeMessage" y "HotplugDetected" (el segundo solo al agregar el monitor). Puede usar RegisterWindowMessage para obtener el identificador para estos mensajes.

También hay otros mensajes que puede verificar, solo vea la respuesta vinculada.