Procédure pour déplacer une fenêtre dans les coins du bureau, en tenant compte de la position et des dimensions de la barre des taches

PROCEDURE Gen_BougeFenetre(xFenêtre,xPosition)
// Déplacement d'une fenêtre sur l'écran

// Déclarations
cLargeur, cHauteur sont des entiers
cPosition est une chaîne

// Récupère les informations sur la barre des taches
cRect est une structure
cg est un entier
ch est un entier
cd est un entier
cb est un entier
FIN


Rec est un cRect
AppelDLL32("user32", "GetWindowRect", AppelDLL32("User32", "FindWindowA", "Shell_TrayWnd", Null), &Rec)
cHauteur=Abs(Rec:cb-Rec:ch)
cLargeur=Abs(Rec:cd-Rec:cg)

// Détermine l'emplacement de la barre des taches
SI (Rec:cd-Rec:cg)=SysXRes() ALORS
SI Rec:ch=0 ALORS cPosition="h" SINON cPosition="b"
SINON
SI Rec:cg=0 ALORS cPosition="g" SINON cPosition="d"
FIN

// Déplace la fenêtre
SELON xPosition

// En haut - Gauche, centre et droite
CAS "hg":
SI cPosition<>"g" ALORS {xFenêtre}..X=0 SINON {xFenêtre}..X=cLargeur
SI cPosition<>"h" ALORS {xFenêtre}..Y=0 SINON {xFenêtre}..Y=cHauteur
CAS "hc":
SELON cPosition
CAS "d": {xFenêtre}..X=(SysXRes()-cLargeur-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=0
CAS "g": {xFenêtre}..X=(SysXRes()+cLargeur-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=0
CAS "h": {xFenêtre}..X=(SysXRes()-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=cHauteur
CAS "b": {xFenêtre}..X=(SysXRes()-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=0
FIN
CAS "hd":
SI cPosition<>"d" ALORS {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur SINON {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur-cLargeur
SI cPosition<>"h" ALORS {xFenêtre}..Y=0 SINON {xFenêtre}..Y=cHauteur


// Au centre - Gauche, centre et droite
CAS "cg":
SELON cPosition
CAS "d": {xFenêtre}..X=0; {xFenêtre}..Y=(SysYRes()-{xFenêtre}..Hauteur)/2
CAS "g": {xFenêtre}..X=cLargeur; {xFenêtre}..Y=(SysYRes()-{xFenêtre}..Hauteur)/2
CAS "h": {xFenêtre}..X=0; {xFenêtre}..Y=(SysYRes()+cHauteur-{xFenêtre}..Hauteur)/2
CAS "b": {xFenêtre}..X=0; {xFenêtre}..Y=(SysYRes()-cHauteur-{xFenêtre}..Hauteur)/2
FIN
CAS "c":
SELON cPosition
CAS "d": {xFenêtre}..X=(SysXRes()-cLargeur-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=(SysYRes()-{xFenêtre}..Hauteur)/2
CAS "g": {xFenêtre}..X=(SysXRes()+cLargeur-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=(SysYRes()-{xFenêtre}..Hauteur)/2
CAS "h": {xFenêtre}..X=(SysXRes()-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=(SysYRes()+cHauteur-{xFenêtre}..Hauteur)/2
CAS "b": {xFenêtre}..X=(SysXRes()-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=(SysYRes()-cHauteur-{xFenêtre}..Hauteur)/2
FIN
CAS "cd":
SELON cPosition
CAS "d": {xFenêtre}..X=SysXRes()-cLargeur-{xFenêtre}..Largeur; {xFenêtre}..Y=(SysYRes()-{xFenêtre}..Hauteur)/2
CAS "g": {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur; {xFenêtre}..Y=(SysYRes()-{xFenêtre}..Hauteur)/2
CAS "h": {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur; {xFenêtre}..Y=(SysYRes()+cHauteur-{xFenêtre}..Hauteur)/2
CAS "b": {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur; {xFenêtre}..Y=(SysYRes()-cHauteur-{xFenêtre}..Hauteur)/2
FIN

// En bas - Gauche, centre et droite
CAS "bg":
SI cPosition<>"g" ALORS {xFenêtre}..X=0 SINON {xFenêtre}..X=cLargeur
SI cPosition<>"b" ALORS {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur SINON {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur-cHauteur
CAS "bc":
SELON cPosition
CAS "d": {xFenêtre}..X=(SysXRes()-cLargeur-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur
CAS "g": {xFenêtre}..X=(SysXRes()+cLargeur-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur
CAS "h": {xFenêtre}..X=(SysXRes()-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur
CAS "b": {xFenêtre}..X=(SysXRes()-{xFenêtre}..Largeur)/2; {xFenêtre}..Y=SysYRes()-cHauteur-{xFenêtre}..Hauteur
FIN
CAS "bd":
SI cPosition<>"d" ALORS {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur SINON {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur-cLargeur
SI cPosition<>"b" ALORS {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur SINON {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur-cHauteur

// Autres positions - Haut, bas et Gauche, droite
CAS "h":
SI cPosition<>"h" ALORS {xFenêtre}..Y=0 SINON {xFenêtre}..Y=cHauteur
CAS "b":
SI cPosition<>"b" ALORS {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur SINON {xFenêtre}..Y=SysYRes()-{xFenêtre}..Hauteur-cHauteur
CAS "g":
SI cPosition<>"g" ALORS {xFenêtre}..X=0 SINON {xFenêtre}..X=cLargeur
CAS "d":
SI cPosition<>"d" ALORS {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur SINON {xFenêtre}..X=SysXRes()-{xFenêtre}..Largeur-cLargeur

FIN