Y a-t-il un événement ou une notification que je peux recevoir ou accrocher chaque fois qu'un moniteur LCD externe est branché ou débranché d'un ordinateur portable exécutant des fenêtres 7? P>
L'ordinateur portable détecte ceci et bascule mon écran sur l'écran externe et le dos avec certains types de redimensionnant ou de repositionnement, mais est-ce exposé par le système d'exploitation afin que les applications puissent fournir un gestionnaire, joindre un script, etc.? P>
Si non, existe-t-il un paramètre de registre ou une API que je pourrais sonder de temps en temps? P>
(Je préfère la programmation C + Win32 API) P>
La réponse de Mike ci-dessous, Cette question a été posée avec différentes formulations à plusieurs reprises, mais pas encore complètement répondu à mon avis: p>
Wm_devicecechange code>
m'a conduit registerDevicénotification () code> , mais je me lance de le mettre en œuvre jusqu'à présent ... P>
3 Réponses :
Vous pouvez essayer wm_devicechange . Si cela ne fait pas l'affaire, exécutez votre fenêtre et attachez SPY ++, ce qui enregistre tous les messages de la fenêtre reçus. Puis branchez votre moniteur et vérifiez si vous avez reçu des messages. P>
Alternativement vous pouvez sonder getSystemmetrics () < / a> avec sm_cmoniteurs. P>
Merci Mike. wm_devicechanger code> ne peut pas le faire seul car il ne vous dit que quelque chose a été ajouté ou supprimé et rien d'autre. Mais ses docs m'a dirigé vers
RegisterDevicénotification () Code> qui semble être celui. Pas facile à comprendre cependant et tous les exemples que je peux trouver sont pour USB mais toujours essayer ...
C'est une réponse vraiment ancienne mais je vais commenter quand même - vous pouvez simplement écouter ce message pour indiquer ce qui avait changé, puis utilisez Enumdisplaymoniteurs (ou quelque chose de similaire, ce n'est pas le seul outil de ce travail) de boucler sur chaque moniteur disponible.
Selon Cet article a > Windows envoie le message Si vous devez réagir aux changements de taille de bureau en raison de l'addition ou de la suppression du moniteur, vous pouvez le faire dans le gestionnaire de ce message. Le Utilisez également la fonction WM_DISPLAYCHANGE CODE> Lorsque vous affichez la résolution Modifications et une fois qu'un écran est ajouté ou supprimé. P>
lparam code> vous donne la nouvelle résolution de l'écran sur lequel se trouve la fenêtre. Notez que cette résolution sera mise à l'échelle si vous utilisez autre chose que 100% de 100% pour la mise à l'échelle du système DPI et votre programme n'est pas DPI-Cawn . P>
EnumdisplayMonitors CODE> pour obtenir la résolution d'affichage pour chaque moniteur connecté et les positions relatives des moniteurs sur le bureau virtuel. Ces fonctions utilisent les valeurs de pixels de périphérique réels indépendamment de la mise à l'échelle DPI. P>
Je viens de tester wm_displaychanger code> avec l'ajout et la suppression d'un moniteur, et cela fonctionne bien sur Windows 10 (bien que la question initiale posait des questions sur Windows 7).
Comme dit ici A>: p>
Vous verrez des messages enregistrés "UXDDISPLAYCHANGEMESSAGE" et "HotplugDétected" (seconde uniquement lors de l'ajout de moniteur). Vous pouvez utiliser registerwindowmessage Pour obtenir l'identifiant pour ces messages. p>
Il existe également d'autres messages que vous pouvez vérifier, voir la réponse liée. P>
Je pensais que j'utiliserais Autohotkey pour Windows, pour détecter le changement de résolution. Ou quelque chose comme ce script - autohotkey.com/board/topic/59846-Detect -Resolution-changement - que je pense détecte le changement d'affichage général.
Il y a du code ici comment utiliser wm_devicechanger et registerDevicénotification Silabs.com/community/interface/knowledge-base.entry.html/201 3 / ...