Comment obtenir la bonne taille physique de l'écran?
Comment puis-je obtenir la taille de l'écran, en centimètres ou en pouces?
Ce code ne fonctionne toujours correctement:
HDC hdc = CreateDC(_T("DISPLAY"),dd.DeviceName,NULL,NULL);
int width = GetDeviceCaps(hdc, HORZSIZE);
int height = GetDeviceCaps(hdc, VERTSIZE);
ReleaseDC(0, hdc)
Surtout pour une configuration multi-écrans.
Mise à jour: j'ai besoin pour obtenir la taille juste pour le commun des moniteurs, qui ont une constante de la taille physique.
OriginalL'auteur KindDragon | 2009-02-23
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une autre façon. La taille physique de l'écran sont stockées dans l'EDID, et les Fenêtres sont presque toujours des copies de sa valeur dans le registre. Si vous pouvez analyser EDID, vous pouvez lire la largeur et la hauteur de l'écran (en centimètres).
Mise à jour: Ajout d'un code
Aussi, il est bon de noter que pas tous les moniteurs de fournir des informations EDID.
haha, prend C 100 lignes de code pour obtenir la taille du moniteur.
Vous avez besoin de faire quelque chose de raisonnable si l'EDID n'est pas là. (Il n'est pas sur ma machine.) Vous devez également prendre en compte des choses comme des projecteurs, où la taille de l'image dépend de la distance de projection, le réglage de zoom, etc.
Je crois que certains de crédit est en place. ofekshilon.com/2014/06/19/reading-specific-monitor-dimensions
OriginalL'auteur KindDragon
Il n'est pas possible de déterminer avec précision la taille physique d'un périphérique vidéo sur windows car cela dépend de beaucoup de variables (par exemple, active moniteur de profil, horizontal/vertical, la résolution, la taille du pixel, etc.), certains ne sont pas sous le contrôle de l'ordinateur.
Pense par exemple projecteur appareils, dont la taille dépend de la distance à la zone de projection qui ne peut pas être déterminée par programme, comme la vidéo-projecteur pourrait être déplacé manuellement à tout moment.
horicontal => horizontale
/me pense Kosi2801 juste démasqué lui-même comme étant en allemand, en utilisant le mot "beamer". Il n'a vraiment pas dire "vidéo-projecteur" en anglais. 🙂
Exactement comment pourrait résolution horizontal/vertical et de taille de pixel de l'incidence sur la physique la taille d'un moniteur? J'ai changé la résolution de beaucoup de choses, et je n'ai jamais remarqué de mon moniteur de croissance ou de décroissance. Vraie au sujet des projecteurs, mais cela ne signifie pas automatiquement que l'obtention de la taille physique est toujours impossible. Juste que c'est impossible pour les projecteurs et la comme.
Sur un moniteur CRT, l'évolution des résolutions et de la taille de pixel peut affecter la quantité du tube est utilisé pour afficher l'image, effectivement la modification de la taille de l'écran. CRT images ont tendance à rétrécir légèrement avec l'âge du tube, ce qui explique pourquoi de nombreux modes d'affichage de la bordure.
OriginalL'auteur Kosi2801
Vous ne pouvez pas obtenir la vraie taille exacte, vous pouvez obtenir une approximation qui dépend de la configuration DPI dans les fenêtres, et de la résolution de l'écran, mais vous ne pouvez pas garantir que c'est la taille réelle.
Surtout dans un multimoniteur situation avec différents écrans (un 19" CRT et LCD 24"). En outre, si l'affichage CRT alors la mesure est le tube de mesure, et non pas la zone d'affichage.
Lorsque les programmes ont besoin de cette information exactement dans le passé, ils ont montré une jauge à l'écran, et avaient l'utilisateur de tenir un morceau de papier à l'écran et à mesure de la largeur du papier avec la jauge. Étant donné le papier est de 8,5" ou A4 alors vous savez que la largeur, et vous pouvez utiliser le numéro d'entrée pour comprendre le réel DPI pour un affichage. Vous devrez peut-être avoir faire pour chaque moniteur dans une configuration à plusieurs écrans.
-Adam
OriginalL'auteur Adam Davis
Naviguer directement le registre n'est pas seulement non pris en charge, mais en réalité ne parvient pas pour les appareils différente de la vôtre. (par exemple, celui sur lequel j'ai testé votre code).
Contrairement à ce que certains ici disent, il n'y est un fonctionnaire moyen d'accéder à l'EDID chemin de clé: par l'utilisation de l'API de Configuration, et plus précisément SetupDiOpenDevRegKey.
Il y a un peu fastidieux d'installation impliqués - Exemple de code est ici.
EDIT: plusieurs moniteurs sont traitées ici.
Avertissement: EDID n'est pas disponible pour tous les moniteurs.
OriginalL'auteur Ofek Shilon
Windows Vista et supérieur de soutien nouvelle fonction GetMonitorDisplayAreaSize()
http://msdn.microsoft.com/en-us/library/ms775210%28VS.85%29.aspx
Mise à jour: Il ne fonctionne pas correctement
OriginalL'auteur KindDragon
Vous pouvez demander LOGPIXELSX de GetDeviceCaps pour obtenir la résolution pour l'affichage, mais il sera généralement un rendement de 96. Voir aussi ce Article MSDN sur l'écriture de DPI applications prenant en charge la.
OriginalL'auteur Paul Dixon
Vous pouvez obtenir de l'EDID du registre.
OriginalL'auteur ZeroElement