Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD12] Identifier les écrans

6 réponses
Avatar
David Berthemet
Bonjour,

Grâce à un code de Francis MOREL sur le forum pcsoft.fr le 02 mai 2006 à
12:36, je peux identifier facilement la résolution des écrans connectés à
l'ordinateur.
Malheureusement, je ne sais pas comment les identifier (écran central, plus
éventuellement écrans droite et gauche).
Quelqu'un saurait-il m'aider dans ce domaine, les fonctions windev (sys...)
ne m'apportant rien d'utile (un sysListeEcran me renvoyant la liste suivante
: \\.\DISPLAY1\Monitor0 Écran Plug-and-Play ; \\.\DISPLAY1\Monitor1 Écran
Plug-and-Play ; \\.\DISPLAY2\Monitor0 Écran Plug-and-Play ;
\\.\DISPLAY2\Monitor01 Écran Plug-and-Play, sur mon poste comportant 1 carte
graphique et 2 écrans.)

Merci d'avance pour toute aide.

Cordialement,

David Berthemet

6 réponses

Avatar
Romain PETIT
David Berthemet avait prétendu :
Bonjour,

Grâce à un code de Francis MOREL sur le forum pcsoft.fr le 02 mai 2006 à
12:36, je peux identifier facilement la résolution des écrans connectés à
l'ordinateur.




http://msdn.microsoft.com/en-us/library/dd144901(VS.85).aspx

- Tu peux avoir le flag 'écran principal' (attention, pas forcément
l'écran central...)
- tu peux avoir dans la structure RECT, les coordonnées et tailles de
chaque écran.
A toi ensuite de programmer pour avoir les positions relatives entre
chaque écran.

A+

--
Romain PETIT
contact : http://cerbermail.com/?O16kfXOFcq
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Avatar
David Berthemet
"Romain PETIT" a écrit dans le message de news:

http://msdn.microsoft.com/en-us/library/dd144901(VS.85).aspx

- Tu peux avoir le flag 'écran principal' (attention, pas forcément
l'écran central...)
- tu peux avoir dans la structure RECT, les coordonnées et tailles de
chaque écran.
A toi ensuite de programmer pour avoir les positions relatives entre
chaque écran.




Merci pour votre réponse.

J'avais déjà vu cette page et j'ai trouvé quelques codes en vb utilisant
cette fonction "GetMonitorInfo", mais j'ai quelques difficulté à comprendre
comment transcrire celà en Windev, les API restant pour moi un grand mystère
!
Je fait des tests et je mettrais mon code si j'y arrive.

Cordialement,

David Berthemet
Avatar
F. MOREL
Bonjour David,

David Berthemet a écrit :
J'avais d�j� vu cette page et j'ai trouv� quelque s codes en vb utilisant
cette fonction "GetMonitorInfo", mais j'ai quelques difficult� � comprendre
comment transcrire cel� en Windev, les API restant pour moi un gr and myst�re
!
Je fait des tests et je mettrais mon code si j'y arrive.



Depuis WD12 pas mal de ces fonctions sont accessibles en natif, et il
n'est plus nécessaire de passer par API.
Tu devrais trouver ton bonheur en regardant l'aide des fonctions :
SysNombreEcran(),
SysListeEcran(),
SysNomEcranPrincipal(),
SysListeRésolutionEcran()...

A+
--
Francis MOREL
http://www.SoftProtect.fr
Avatar
David Berthemet
Bonjour,

Ayant réussi à trouver une solution à mon problème, je donne ici le code
pour ceux que celà pourrait intérresser. J'identifie la résolution des
écrans, leur place (grâce aux coordonnées) et la zone utilie de la fenêtre
(càd sans la barre de tâche pour l'écran principal).

J'ai créé une procédure récupérant les infos et qui est passée en paramètre
lors de l'appel à l'API "EnumDisplayMonitors" dans le code d'initialisation
de mon projet (cet api me permet de récupérer le handle de l'écran à passer
à l'API "GetMonitorInfoA" qui est contenu dans la procédure.
Nota : J'ai mis dans une fenêtre TRACE les infos récupérées pour cet exemple
alors que mon code original enregistre ces données dans ma table de
configuration.

//Dans le code d'initialisation du projet
API("User32.dll","EnumDisplayMonitors",Null,Null,&MonitorEnumProc,Null)

//La procédure callback pour "EnumDisplayMonitors"
PROCEDURE MonitorEnumProc(hMonitor est un
entier,hdcMonitor,lprcMonitor,LpdwData)

RECT est une structure
RectLeft est un entier
RectTop est un entier
RectRight est un entier
RectBottom est un entier
FIN

MONITORINFO est une structure
cbSize est un entier
rcMonitor est un RECT
rcWork est un RECT
dwFlags est un entier
FIN

Tmi est un MONITORINFO
Tmi:cbSize = Dimension(Tmi)
API("User32.dll","GetMonitorInfoA",hMonitor, &Tmi)
SI Tmi:dwFlags = 1 ALORS
Trace("Écran principal :
",Tmi:rcMonitor:RectLeft,Tmi:rcMonitor:RectTop,Tmi:rcMonitor:RectRight,Tmi:rcMonitor:RectBottom)
Trace("Zone utilisable de l'écran :
",Tmi:rcWork:RectLeft,Tmi:rcWork:RectTop,Tmi:rcWork:RectRight,Tmi:rcWork:RectBottom)
SINON
Trace("Écran ''secondaire'' :
",Tmi:rcMonitor:RectLeft,Tmi:rcMonitor:RectTop,Tmi:rcMonitor:RectRight,Tmi:rcMonitor:RectBottom)
Trace("Zone utilisable de l'écran :
",Tmi:rcWork:RectLeft,Tmi:rcWork:RectTop,Tmi:rcWork:RectRight,Tmi:rcWork:RectBottom)
FIN

Je ne sais pas si c'est la meilleure ou la plus simple des solutions, mais
mes premiers tests semble dire que tout fonctionne correctement.

Cordialement,

David Berthemet
Avatar
Thumain Th.
Le Thu, 14 May 2009 12:10:30 +0200, David Berthemet
a écrit:

Bonjour,

Ayant réussi à trouver une solution à mon problème, je donne ici le code
pour ceux que celà pourrait intérresser. J'identifie la résolution des
écrans, leur place (grâce aux coordonnées) et la zone utilie de la


[...]
David Berthemet





Merci

--
TT
Avatar
David Berthemet
"David Berthemet" a écrit dans le message de news:

Bonjour,

Ayant réussi à trouver une solution à mon problème, je donne ici le code
pour ceux que celà pourrait intérresser. J'identifie la résolution des
écrans, leur place (grâce aux coordonnées) et la zone utile de la fenêtre
(càd sans la barre de tâche pour l'écran principal).
...



Après relecture de mon mail, j'ai remarqué que j'ai oublié la dernière de
ligne de code dans la procédure.
Il faut donc rajouter une ligne contenant l'instruction "RENVOYER VRAI" à la
fin de la procédure pour permettre à la procédure de fonctionner
correctement et de boucler sur tous les écrans.

Cordialement,

David Berthemet