LISTER LES ECRANS ET LEURS RÉSOLUTIONS

BobTSMSI Messages postés 60 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 2 mars 2007 - 26 févr. 2004 à 14:51
BobTSMSI Messages postés 60 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 2 mars 2007 - 12 mars 2004 à 12:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20767-lister-les-ecrans-et-leurs-resolutions

BobTSMSI Messages postés 60 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 2 mars 2007
12 mars 2004 à 12:14
WAOUH!!! HEP HEP!! ça m'intéresse ça!
Beaucoup beaucoup même!
Fait tourner!
Je suis cette histoire avec intérêt!

Merci BasicInstinct

PS: j'espère que j'pourrai adapter ça avec mes surfaces DirectDraw!!

Bye les gens :)
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
12 mars 2004 à 11:57
j'ai réussi a faire ce que je voulais avec mon multi-ecran....
MAJ tres prochainement :)))

@++
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
26 févr. 2004 à 17:57
Ok, n'hésite pas a faire tourner ou a poster une source sourtout ;)
Tu fait sa avec GetWindowsPos (ou un truc du genre) non ?
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
26 févr. 2004 à 17:36
y'a moyen de savoir si la form est dans tel ou tel ecran, mais je l'ai pas mis pour ne pas alourdir le code. Je le rajouterai si vous voulez.

Moi je m'en sert pour un serveur de Log qui est plein ecran sur l'ecran2 ou en systray si l'ecran est inactif.

Merci pour les commentaires :)
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
26 févr. 2004 à 16:54
Héhé, le ce BobTSMSI ;)
J'ai également déja pensé à faire du multi écran, j'ai réfléchi à la technique mais pas passé à l'acte, plus besoin : les fenetres de windows, du moins les positions sont numérotées en je ne sais plus quelle unité (twips ou pixels). Si tu met dans le fom load d'une appli me.left=0, elle sera sur la bordure droite de l'écran 0. Apres, si tu as 2 écrans, le primaire est à droite et le 2eme a sa gauche, toujours pareil pour l'histoire du left = 0, mais si tu met par exemple me.left = -500, alors la elle fenetre sera sur l'autre écran ;) Apres a toi de trouver si l'éran 2 est a gauche, à droite, quelles dimensions (avec le code ici présent peut etre ? ;)) D'ailleur, il est utile est totalement fonctionnel ton code BasicInstinct, bravo;)
BobTSMSI Messages postés 60 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 2 mars 2007
26 févr. 2004 à 15:02
Chez moi ça marche nickel cette méthode...

Bon courage!

Autre chose, si tu sais comment faire afficher une form dans un autre écran que le 0 , ça m'intéresse. C'est pour faire du multi-écran avec mon écran de veille.

Bye!
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
26 févr. 2004 à 14:57
c'est bien ce que j'ai essayé de faire, mais ca me fait planter VB. Dc pour le moment j'ai pas plus epilogué que ca et je m'y remettrai quand j'aurai le courage !! (certainement cette nuit)

Merci
BobTSMSI Messages postés 60 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 2 mars 2007
26 févr. 2004 à 14:51
Salut BasicInstinct!

Pour changer la résolution de l'écran 0, je suppose que tu utilises l'API "ChangeDisplaySettings"... Ben pour changer la résolution sur n'importe quel écran, utilise "ChangeDisplaySettingsEx", ça marche exactement pareil que la première fonction mais en premier paramètre, on rentre le numéro de l'écran. Voilà la déclaration :

Public Const CDS_TEST = &H4
Public Const CDS_UPDATEREGISTRY = &H1
Public Declare Function ChangeDisplaySettingsEx Lib "user32" Alias "ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevMode As Any, ByVal hWnd As Long, ByVal dwFlags As Long, lParam As Any) As Long

Et l'appel :

ChangeDisplaySettingsEx(ByVal NumDevice&, DevMode, ByVal 0&, CDS_TEST, ByVal 0&)

(donc ByVal 0& pour le hWnd et ByVal 0& pour lparam. et pour dwFlags CDS_TEST pour tester la résolution, CDS_UPDATEREGISTRY pour mettre à jour le registre, sinon ByVal 0&)

Si tu choisis CDS_UPDATEREGISTRY, je crois (à vérifier) qu'il faut ajouter ça:

Déclaration:

Public Const HWND_BROADCAST = &HFFFF
Public Const HWND_DESKTOP = 0
Public Const WM_DEVMODECHANGE = &H1B
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Code juste après l'appel à ChangeDisplaySettingsEx:

SendMessage HWND_BROADCAST, WM_DEVMODECHANGE, 0, 0
SendMessage HWND_DESKTOP, WM_DEVMODECHANGE, 0, 0


Normalement ça marche, si j'ai rien oublié ;) ...

Sinon pour l'histoire de savoir si ça marche sur toutes les cartes graphiques, normalement oui puisque c'est une fonction Win32, la même qui est utilisée quand tu change la résolution par le panneau de configuration. Donc pas d'incompatibilité avec telle ou telle carte graphique.

A plus!