Page 1 sur 1
[R] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : mar. 13 janv. 2015 14:48
par Zaibai
Bonjour à tous !
Après quelques heures de recherche (google), je viens demander votre aide.
J'ai une GUI qui se lance en fullscreen (mode popup), celle-ci se lance constamment sur l'écran principale ce qui est logique.
Ce que je souhaiterais réaliser:
If détection de plusieurs écran Then demander sur quelle écran la GUI doit se lancer.
J'imagine que cela est réalisable ?
Si oui, pouvez-vous me donner des pistes ? Des commandes ?
Merci d'avance pour vos réponse

Re: [..] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : mar. 13 janv. 2015 15:03
par DimVar
Re: [..] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : mar. 13 janv. 2015 15:39
par Zaibai
J'ai trouvé une fonction intéressante, il s'agit de: _WinAPI_EnumDisplayDevices
Voici le code que j'ai réalisé:
► Afficher le texte
Code : Tout sélectionner
Dim $Array_Device[1]
$Array_Device[0] = "\\.\DISPLAY1"
Local $aDevice, $i = 0, $text
While 1
$aDevice = _WinAPI_EnumDisplayDevices("", $i)
If @error Then ExitLoop
If $aDevice[3] = 1 Then
_ArrayAdd($Array_Device, $aDevice[1])
_ArrayDisplay($Array_Device)
EndIf
$i += 1
WEnd
Il vérifie que le "display" fait partis du "bureau" windows. (certains display sont simulé pour le remote control)
Si il s'agit bien d'un écran secondaire faisant partis du "bureau windows", il l'ajoute dans un tableau.
Maintenant que mon tableau contient display1, display2, display3 ect, comment dire à ma gui de se lancer sur telle ou telle écran ?
Re: [..] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : mar. 13 janv. 2015 16:05
par DimVar
Re: [..] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : mar. 13 janv. 2015 16:16
par TommyDDR
Voici de quoi récupérer les zones d'affichage des écrans (je vous laisse l'adapter à vos besoins) :
► Afficher le textecode
Code : Tout sélectionner
#include <WinAPIGdi.au3>
#include <WinAPISys.au3>
Global $monitors = _WinAPI_EnumDisplayMonitors()
Global $monInfo
Global $taille[4]
Global $mode = 0 ;0 = écran entier / 1 = écran sans la barre des tâches
For $i = 1 To $monitors[0][0]
$monInfo = _WinAPI_GetMonitorInfo($monitors[$i][0])
$taille[0] = DllStructGetData($monInfo[$mode], "left")
$taille[1] = DllStructGetData($monInfo[$mode], "top")
$taille[2] = DllStructGetData($monInfo[$mode], "right")-DllStructGetData($monInfo[0], "left")
$taille[3] = DllStructGetData($monInfo[$mode], "bottom")-DllStructGetData($monInfo[0], "top")
__ArrayDisplay($taille, "Écran " & $i)
Next
Func __ArrayDisplay($taille, $title = "")
Local $txt = ""
For $i = 0 To UBound($taille, 1)-1
$txt &= $taille[$i] & ", "
Next
$txt = StringTrimRight($txt, 2) & @CRLF
If(StringLen($title) > 0) Then $txt = $title & " : " & $txt
ConsoleWrite($txt)
EndFunc
Re: [R] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : ven. 16 janv. 2015 19:49
par Zaibai
Merci TommyDDR !
J'ai retravaillé sur ce que tu m'as fournis.
Une inputbox demande sur quels écrans doit être la gui et la gui prend les valeurs correspondant(emplacement/taille) à l'écran choisi.
Voici le code:
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ColorConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISys.au3>
#include <Array.au3>
Global $monitors = _WinAPI_EnumDisplayMonitors()
Global $monInfo
Global $taille[5][$monitors[0][0]]
Global $mode = 0 ;0 = écran entier / 1 = écran sans la barre des tâches
Dim $j = 0
For $i = 1 To $monitors[0][0]
$monInfo = _WinAPI_GetMonitorInfo($monitors[$i][0])
$taille[0][$j] = "Écran " & $i
$taille[1][$j] = DllStructGetData($monInfo[$mode], "left")
$taille[2][$j] = DllStructGetData($monInfo[$mode], "top")
$taille[3][$j] = DllStructGetData($monInfo[$mode], "right")-DllStructGetData($monInfo[0], "left")
$taille[4][$j] = DllStructGetData($monInfo[$mode], "bottom")-DllStructGetData($monInfo[0], "top")
$j += 1
Next
;_ArrayDisplay($taille)
$j = 0
$Display = InputBox("Quel(s) Écran(s)", "Quel(s) Écran(s) : de 1 à " & $monitors[0][0])
If @error Then Exit
$Display = $Display - 1
For $i = 1 To $monitors[0][0]
;MsgBox(0,"tt", $j & " " & $Display)
If $Display = $j Then
$_GuiC = GUICreate("C", $taille[3][$j], $taille[4][$j], $taille[1][$j], $taille[2][$j], $WS_POPUP)
GUICtrlCreateLabel("GUI FULL SCREEN", -1, -1, $taille[3][$j], $taille[4][$j], $SS_CENTER + $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 80)
GUICtrlSetColor(-1, $COLOR_RED)
GUISetState()
EndIf
$j += 1
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Exit
Merci et à bientot !
Re: [R] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : sam. 17 janv. 2015 11:40
par TommyDDR
De rien
EDIT : Pourquoi avoir fait une boucle for à la fin ? Et pourquoi créer une variable $j quand $i suffit ?
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ColorConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISys.au3>
#include <Array.au3>
Global $monitors = _WinAPI_EnumDisplayMonitors()
Global $monInfo
Global $taille[5][$monitors[0][0]]
Global $mode = 0 ;0 = écran entier / 1 = écran sans la barre des tâches
For $i = 1 To $monitors[0][0]
$monInfo = _WinAPI_GetMonitorInfo($monitors[$i][0])
$taille[0][$i-1] = "Écran " & $i
$taille[1][$i-1] = DllStructGetData($monInfo[$mode], "left")
$taille[2][$i-1] = DllStructGetData($monInfo[$mode], "top")
$taille[3][$i-1] = DllStructGetData($monInfo[$mode], "right")-DllStructGetData($monInfo[0], "left")
$taille[4][$i-1] = DllStructGetData($monInfo[$mode], "bottom")-DllStructGetData($monInfo[0], "top")
Next
$Display = InputBox("Quel(s) Écran(s)", "Quel(s) Écran(s) : de 1 à " & $monitors[0][0])
If @error Or $Display <= 0 Or $Display > $monitors[0][0] Then Exit
$Display -= 1
$_GuiC = GUICreate("C", $taille[3][$Display], $taille[4][$Display], $taille[1][$Display], $taille[2][$Display], $WS_POPUP)
GUICtrlCreateLabel("GUI FULL SCREEN", -1, -1, $taille[3][$Display], $taille[4][$Display], $SS_CENTER + $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 80)
GUICtrlSetColor(-1, $COLOR_RED)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Exit
Re: [R] GUI - spécifier l'écran d'affichage (multi-screen)
Posté : dim. 18 janv. 2015 18:15
par Zaibai
En effet, j'aurais du y penser...
Merci pour cette optimisation !