[R] Affichage GUI sur écrans partagés

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

[R] Affichage GUI sur écrans partagés

#1

Message par Hugues »

Bonjour,

Je ne sais pas si le titre est clair, mais voilà ce que je voudrais réaliser ^^.

J'ai un PC avec 2 écrans (en mode étendu). La taille de ces écrans peut-être différente.

Je voudrais afficher sur chaque écran, le même GUI mais avec des valeurs inputs différentes.

Je pense partir sur un fichier *.ini pour gérer les valeurs à afficher

[SCREEN1]
Valeur1=toto
Valeur2=tata
[SCREEN2]
Valeur1=blabla
Valeur2=blublu

, et pour le GUI, écran 1 -> Func _GUIScreen1() et écran 2 -> Func _GUIScreen2().

Déjà avant de commencer, suis-je dans la bonne direction?

Merci par avance.
Modifié en dernier par Hugues le mar. 15 sept. 2015 09:51, modifié 1 fois.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..]Affichage GUI sur écrans partagés

#2

Message par TT22 »

Ça dépend, si tes deux GUIs peuvent fonctionner de manière indépendante le plus simple serait de faire deux scripts :wink:
Par contre si elles doivent interagir le mieux serait de les traiter tour à tour en faisant des GUISwitch().
Cordialement,
TT22
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..]Affichage GUI sur écrans partagés

#3

Message par Hugues »

Les 2 gui seraient indépendantes, mais ayant un design identique ^^.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..]Affichage GUI sur écrans partagés

#4

Message par TT22 »

Alors je pense que le plus simple serait de faire deux scripts, un par GUI :wink:
Cordialement,
TT22
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..]Affichage GUI sur écrans partagés

#5

Message par Hugues »

Ok, je vais me diriger vers cette solution.

Par contre, il faut que je fasse un script principal qui:

-Détermine si j'ai 1 ou 2 écran(s), avec _WinAPI_GetSystemMetrics(80)

Si 1 -> GUI1 (script1) sur écran 1
Si 2 -> GUI1 (script1) sur écran 1 & GUI2 (script2) sur écran 2.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..]Affichage GUI sur écrans partagés

#6

Message par TT22 »

Oui, ça devrait fonctionner !
Cordialement,
TT22
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#7

Message par Hugues »

Bon, un problème se pose déjà...

J'arrive à compter le nombre d'écran, mais je ne trouve pas de fonction pour faire,

Tu affiches mon GUI 1 sur l'écran 1 et/ou mon GUI 2 sur l'écran 2...

J'ai trouvé plein de fonction pour récupérer les tailles et les identifications...

Merci par avance.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#8

Message par TT22 »

Désolé mais n'ayant qu'un écran à disposition je ne pourrais pas t'aider sur ce problème :?
Cordialement,
TT22
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#9

Message par Hugues »

:cry: :cry:
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#10

Message par Hugues »

Bon j'ai un peu avancé ^^,

Mon problème est comment "forcé" un GUI à s'afficher sur l'ecran 1 ou 2...
► Afficher le texte
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#11

Message par jguinch »

Bin faut simplement déplacer la fenêtre aux coordonnées x et y qui correspondent au coin supérieur gauche du deuxième écran
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#12

Message par Hugues »

Oui, mais comment fait-on car le coin haut gauche de mon deuxième écran devrait avoir 0 pour coordonnée?
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#13

Message par Hugues »

Dans mon programme j'utilise cette fonction (qui doit-être de toi de mémoire ^^)

Code : Tout sélectionner

[spoiler=]
Func _ScreenAdaptation()
    $WorkAera = _GetWorkArea()
    Local $aGuiPos = WinGetPos($MainGUI)
    If $aGuiPos[0] <> $WorkAera[0] Or $aGuiPos[1] <> $WorkAera[1] Or $aGuiPos[2] <> $WorkAera[4] Or $aGuiPos[3] <> $WorkAera[5] Then WinMove($MainGUI, "", $WorkAera[0], $WorkAera[1], $WorkAera[4], $WorkAera[5])
    
    Return $WorkAera
EndFunc   ;==>_ScreenAdaptation

Func _GetWorkArea()
    Global $Area[6]
    Local $StartRect = DllStructCreate("int[4]")
    Local $PStartRect = DllStructGetPtr($StartRect)
    DllCall("user32.dll", "int", "SystemParametersInfo", "int", 48, "int", 0, "ptr", $PStartRect, "int", 0)
    $Area[0] = DllStructGetData($StartRect, 1, 1)
    $Area[1] = DllStructGetData($StartRect, 1, 2)
    $Area[2] = DllStructGetData($StartRect, 1, 3)
    $Area[3] = DllStructGetData($StartRect, 1, 4)
    $Area[4] = $Area[2] - $Area[0]
    $Area[5] = $Area[3] - $Area[1]
    Return $Area
EndFunc   ;==>_GetWorkArea
[/spoiler]
Elle me permet d'ajuster mon GUI à la fenêtre. Je pense qu'il faut agir au niveau du WinMove(), mais le problème c'est que ça ne "reformate" par le GUI à l'écran étendu...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#14

Message par jguinch »

Les coordonnées de l'écran principal sont x=0 et y=0.
Les coordonnées des autres écrans dépendent de la résolution utilisée et de la disposition de ceux-ci.
Si tu as deux écrans en 1280x1024, que l'écran de gauche est l'écran principal et qu'ils sont alignés, les coordonnées de l'écran secondaire seront x=1280:y=0.
Si l'écran principal est celui de droite, tu auras x=-1280.

Regarde avec ça si ça te va :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#15

Message par Hugues »

Ça me retourne 0, 0 comme coordonnées. Et non mes écrans peuvent être de tailles différentes justement... Je peux avoir en écran principal un écran PC classique de n'importe quelle résolution et en secondaire un écran LCD 42"...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#16

Message par jguinch »

désolé, je suis parti sur la mauvais fonction.
Essaye plutôt _WinAPI_EnumDisplayMonitors (voir l'exemple)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2128
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#17

Message par TommyDDR »

Code : Tout sélectionner

Func _MonitorsGetPosAndSize($mode = 0)
    Local $monitors = _WinAPI_EnumDisplayMonitors()
    Local $ret[$monitors[0][0]][4]
    For $i = 0 To $monitors[0][0]-1
        Local $monInfo = _WinAPI_GetMonitorInfo($monitors[$i+1][0])
        $ret[$i][0] = DllStructGetData($monInfo[$mode], "left")
        $ret[$i][1] = DllStructGetData($monInfo[$mode], "top")
        $ret[$i][2] = DllStructGetData($monInfo[$mode], "right")-DllStructGetData($monInfo[0], "left")
        $ret[$i][3] = DllStructGetData($monInfo[$mode], "bottom")-DllStructGetData($monInfo[0], "top")
    Next
    Return $ret
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Affichage GUI sur écrans partagés

#18

Message par Hugues »

Sujet résolu,

Un GRAND MERCI à vous tous!!!
Répondre