[WD12] Identifier les écrans

Le
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
: \.DISPLAY1Monitor0 Écran Plug-and-Play ; \.DISPLAY1Monitor1 Écran
Plug-and-Play ; \.DISPLAY2Monitor0 Écran Plug-and-Play ;
\.DISPLAY2Monitor01 Écran Plug-and-Play, sur mon poste comportant 1 carte
graphique et 2 écrans.)

Merci d'avance pour toute aide.

Cordialement,

David Berthemet
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Romain PETIT
Le #19309721
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
David Berthemet
Le #19319001
"Romain PETIT"
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
F. MOREL
Le #19324661
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
David Berthemet
Le #19332351
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
Thumain Th.
Le #19333871
Le Thu, 14 May 2009 12:10:30 +0200, 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


[...]
David Berthemet





Merci

--
TT
David Berthemet
Le #19334761
"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 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
Publicité
Poster une réponse
Anonyme