• L
  • M
  • M
  • J
  • V
  • S
  • D
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

AutoHotKey - Effet WoW Maximizer sans WoW Maximizer

L'objectif de ce script est de nous permettre d'afficher 3 fenêtres de World of Warcraft sur 2 écrans de résolution différente, et cela sans même se poser de question ou sortir la calculette pour positionner vos écrans...

Le principe du Script

Dans un premier temps, ce script va avoir pour but de nous demander, parmis les 3 World of Warcarf en cours d'exécution, lequel sera votre fenêtre de jeu principale.

Dans un deuxième temps, le script va vous demander lequel de vos deux écrans est celui qui va devoir recevoir la fenêtre principale de World of Warcraft.

Enfin, le script va positionner chacune des fenêtres du jeu et va générer 3 raccourcis claviers (CTRL+SHIFT+F10, CTRL+SHIFT+F11 et CTRL+SHIFT+F12) qui nous permettront de minimiser chacune des fenêtres du jeu (Car elle n'auront plus ni bordure, ni barre d'entête)

Le Script, pas à pas et commenté

On a besoin de connaître laquelle, des 3 fenêtres de World of Warcraft, est celle qui sera la fenêtre principale.

Pour cela, on va parcourir chacune d'entre elle est poser la question "est-elle la fenêtre principale ?"

A noter que le script est conçu pour 3 fenêtres et il ne s'assure pas que l'on à bien 3 fenêtres. De tels tests feront peut-être l'objet d'un autre tutorial, qui sait ?...

SplashTextOn, 400, , Le script cherche la fenêtre de votre personnage principal.

Sleep, 2000

SplasHtextoff

WinGet, appid, List, World of Warcraft

WinMinimize, ahk_id %appid1%
WinMinimize, ahk_id %appid2%
WinMinimize, ahk_id %appid3%

WinActivate, ahk_id %appid1%

MsgBox, 4,, Cette fenêtre est-elle celle de votre personnage principal ?

IfMsgBox Yes
{

 idMain = %appid1%
 idAlt1 = %appid2%
 idAlt2 = %appid3%

} else {

 WinActivate, ahk_id %appid2%

 MsgBox, 4,, Cette fenêtre est-elle celle de votre personnage principal ?

 IfMsgBox Yes
 {

  idMain = %appid2%
  idAlt1 = %appid1%
  idAlt2 = %appid3%

 } else {

  idMain = %appid3%
  idAlt1 = %appid1%
  idAlt2 = %appid2%

 }
}

Je ne m'attarde pas plus sur les explications concernant la recherche de la fenêtre principale, cela fait l'objet du Tutorial N°2 disponible sur dual-boxing.fr et si vous voulez en savoir plus je vous encourage à le consulter.

Au final, on se retrouve avec une variable idMain qui correspond à notre fenêtre principale et deux variables, idAlt1 et idAlt2, pour les deux autres fenêtres.

L'étape suivante consiste à connaître notre écran principal, là encore on va poser bêtement la question...

On demande à l'utilisateur si son écran principal est le N°1, cela correspond au numéro que l'on retrouve dans les paramètres d'affichage de Windows lorsque l'on a plus d'un écran.

MsgBox, 4,, Votre écran principal est-il le N°1 ?

IfMsgBox Yes
{

 SysGet, Pri, Monitor, 1
 SysGet, Mon, Monitor, 2

} else {

 SysGet, Pri, Monitor, 2
 SysGet, Mon, Monitor, 1

}

Une fois que l'on connaît notre écran principal, on peut en récupérer les propriétés de chacun.

La variable Pri va comporter les propriétés de l'écran principal, et Mon celles de l'écran secondaire. Parmis ces propriétés on aura besoin de la position de l'écran qui sont accessibles par le bias des variables PriLeft, PriTop, PriRight et PriBottom pour l'écran principal, MonLeft, MonTop, MonRight et MonBottom pour l'autre.

Maintenant que l'on connaît notre écran principal et notre fenêtre WoW principale, on va pouvoir positionner tous ce petit monde...

Mais avant, il nous faut retirer les bordures et l'entête de chaque fenêtre de World of Warcraft, pour ça la fonction WinSet s'en charge.

WinSet, Style, -0xC00000, ahk_id %idMain%
WinSet, Style, -0x40000 , ahk_id %idMain%
WinSet, Style, -0xC00000, ahk_id %idAlt1%
WinSet, Style, -0x40000 , ahk_id %idAlt1%
WinSet, Style, -0xC00000, ahk_id %idAlt2%
WinSet, Style, -0x40000 , ahk_id %idAlt2%

WinSet est un peu une sorte de fonction multitâche, elle comporte un premier paramétre qui na nous permet de lui dire se que l'on attend d'elle. En l'occurence, ce paramètre doit recevoir la valeur "Style", ainsi WinSet saura que le veut toucher au style de la feuille. Le troisième paramètre lui nous permet de désigner la tâche à accomplir, -0xC00000 pour masquer l'entête et -0x40000 pour la bordure.

Ultime étape avant d'en finir, celle du calcul du positionnement de chacune des fenêtres de World of Warcraft.

Bien qu'ayant trois fenêtre, je ne vais calculer la position que des fenêtres secondaires, car la principale est en pseudo full-screen sur l'écran principal, ce n'est donc guère compliqué à calculer.

Le positionnement des fenêtres additionnelles est simples :

  • Le X de chaque fenêtre n'est rien d'autre que le coin haut-gauche de l'écran secondaire.

  • La Largeur (W) est égale à la position du coin Droit de l'écran, moins celle du coin Gauche.

  • La Hauteur (H) est égale à la position du coin le plus bas de l'écran, moins celle du coin le plus haut, le tout divisé par deux car nos deux fenêtres vont se partager l'écran. Oui, sur un écran le point (0,0) correspond au coin haut-gauche et l'axe des Y pointes vers le bas.

  • Enfin, on va devoir définir deux Y, Y1 pour la première fenêtre qui ne sera rien de plus que le haut de l'écran, et Y2 pour la deuxième fenêtre qui correspond à Y1 plus H.

Se qui nous donne :

X := MonLeft
W := (MonRight - MonLeft)
H := (MonBottom - MonTop) / 2

Y1 := MonTop
Y2 := MonTop + H

Dernière étape, positionner enfin nos écrans.

Pour cela, on utilise la fonction WinMove à laquelle on va transmettre les coordonnées de chacune des fenêtres.

WinMove, ahk_id %idMain%,, PriLeft, PriTop, PriRight - PriLeft, PriBottom - PriTop

WinMove, ahk_id %idAlt1%,, X, Y1, W, H
WinMove, ahk_id %idAlt2%,, X, Y2, W, H

Vous remarquerez que même la fenêtre principale est positionnée à l'aide de WinMove, on n'utilise pas WinMaximize car cette fonction ne permet pas de dire par rapport à quel écran on veut maximiser la fenêtre.

Enfin, on définit nos trois raccourcis sans qui on ne pourrait plus réduire nos fenêtres...

WinGet, appid, List, World of Warcraft

#IfWinActive World of Warcraft

^+F10:: WinMinimize, ahk_id %idMain%
^+F11:: WinMinimize, ahk_id %idAlt1%
^+F12:: WinMinimize, ahk_id %idAlt2%

Le Script au complet

Revoici l'intégralité du script, il vous suffit de le copier/coller dans AutoHotKey pour l'utiliser et de l'adapter à vos besoins.

SplashTextOn, 400, , Le script cherche la fenêtre de votre personnage principal.

Sleep, 2000

SplasHtextoff

WinGet, appid, List, World of Warcraft

WinMinimize, ahk_id %appid1%
WinMinimize, ahk_id %appid2%
WinMinimize, ahk_id %appid3%

WinActivate, ahk_id %appid1%

MsgBox, 4,, Cette fenêtre est-elle celle de votre personnage principal ?

IfMsgBox Yes
{

 idMain = %appid1%
 idAlt1 = %appid2%
 idAlt2 = %appid3%

} else {

 WinActivate, ahk_id %appid2%

 MsgBox, 4,, Cette fenêtre est-elle celle de votre personnage principal ?

 IfMsgBox Yes
 {

  idMain = %appid2%
  idAlt1 = %appid1%
  idAlt2 = %appid3%

 } else {

  idMain = %appid3%
  idAlt1 = %appid1%
  idAlt2 = %appid2%

 }
}

MsgBox, 4,, Votre écran principal est-il le N°1 ?

IfMsgBox Yes
{

 SysGet, Pri, Monitor, 1
 SysGet, Mon, Monitor, 2

} else {

 SysGet, Pri, Monitor, 2
 SysGet, Mon, Monitor, 1

}

MsgBox, Veuillez patienter le temps de mettre en place les fenêtres de jeu.

WinActivate, ahk_id %idMain%
WinActivate, ahk_id %idAlt1%
WinActivate, ahk_id %idAlt2%

WinSet, Style, -0xC00000, ahk_id %idMain%
WinSet, Style, -0x40000 , ahk_id %idMain%
WinSet, Style, -0xC00000, ahk_id %idAlt1%
WinSet, Style, -0x40000 , ahk_id %idAlt1%
WinSet, Style, -0xC00000, ahk_id %idAlt2%
WinSet, Style, -0x40000 , ahk_id %idAlt2%

X := MonLeft
W := (MonRight - MonLeft)
H := (MonBottom - MonTop) / 2

Y1 := MonTop
Y2 := MonTop + H

WinMove, ahk_id %idMain%,, PriLeft, PriTop, PriRight - PriLeft, PriBottom - PriTop

WinMove, ahk_id %idAlt1%,, X, Y1, W, H
WinMove, ahk_id %idAlt2%,, X, Y2, W, H

#IfWinActive World of Warcraft

^+F10:: WinMinimize, ahk_id %idMain%
^+F11:: WinMinimize, ahk_id %idAlt1%
^+F12:: WinMinimize, ahk_id %idAlt2%