<< Retour au sommaire

 

LES FENÊTRES

 

 

 

Le sommaire :

  1. Introduction.
  2. Les fenêtres standard.
  3. Les fenêtres SDM.

 

 

Introduction

 

En informatique, il existe une hiérarchie dans la structure des différents objets que l’on aperçoit à l’écran.

 

Cette structure hiérarchique est appelée « Parents-enfants ».

 

Le bureau de WINDOWS est, par excellence,  la fenêtre père de toutes les autres fenêtres, par exemple, des fenêtres WORD, EXCEL, Calculatrice ETC

 

Chacune des fenêtres enfants est elle-même père d’un certains nombre de fenêtres la composant. Par exemple, dans le cas de la fenêtre principale de WORD, (enfant de la fenêtre bureau ,) se trouvent des fenêtres d’un même niveau hiérarchique, le menu déroulant, la zone d’édition, les barres d’outils ETC

 

Dans l’esprit de votre machine, chaque objet contenu dans la fenêtre principale est lui-même une fenêtre.

 

Il ne faut pas se laisser piéger par l’idée que l’on se fait d’une fenêtre.

Une fenêtre n’est donc pas forcément un grand rectangle qui remplit l’écran dont une barre de titre trône sur sa partie supérieure.

En effet, chaque objet contenu dans ce rectangle est une fenêtre enfant de celle qui la contient.

 

Donc, pour résumer, chaque objet est une fenêtre composée de sous fenêtre.

Le rapport qui existe entre ces fenêtre est de type « Parents-enfants) et, bien sûr, pour une fenêtre donnée, se trouvent des fenêtres hiérarchiquement d’un même niveau.

 

 

Les fenêtres standard

 

Le programmeur utilise un numéro d’identification de fenêtre.

Cette information est appelée l’identifiant de la fenêtre donc, en restant dans notre exemple de la fenêtre principale de WORD, chaque fenêtre enfant, le menu déroulant, la zone d’édition, la barre d’outils, sont localisables de part leur identifiant.

Il en est de même d’ailleurs pour la fenêtre parent de ces objets, c’est-à-dire la fenêtre principale de WORD.

 

Mais les informations que l’on peut obtenir d’une fenêtre peuvent également concerner d’autres aspects de la fenêtre, par exemple son type, son état ETC

 

Commençons à découvrir certaines des propriétés des fenêtres. Mais avant d’aborder leur identifiant, nous allons traiter les propriétés qui concernent leurs types.

 

WINDOWS CLASS = C’est une chaîne de caractères qui indique des informations à propos de ce qu’est une fenêtre, et de ce qu’elle fait. Cette information nous permettra de savoir si la fenêtre est de type bouton, liste ou tout autre chose. Cette information est indispensable car vous savez très bien que l’on ne manipulera pas toutes les fenêtres de la même manière, selon si elle est de type bouton, de type liste ou de type menu déroulant.

Cette information s’obtient avec la fonction :

GetWindowClass ()

Mais attention, l’information WINDOWS CLASS peut être insuffisante pour certains types de fenêtres.

C’est le cas par exemple pour les boutons. Le fait de savoir que la fenêtre courante est un bouton ne précise pas si le bouton est de type bouton simple ou de type menu bouton.

La classe est déterminée par le programmeur lors de la création de l’application. S’il ne détermine aucune classe, c’est le langage de programmation utilisé pour élaborer l’application qui la déterminera…

 

WINDOW TYPE = Cette information est aussi une chaîne de caractères concernant le type d’une fenêtre. Néanmoins, l’information est plus détaillée que WINDOW CLASS. Ils n’en reste pas moins que pour certaines fenêtres, l’information que WINDOW CLASS et WINDOWS TYPE retournent peuvent être identiques, si le programmeur n’a pas prévu de différencier ces 2 informations.

Cette information s’obtient avec la fonction :

GetWindowType ()

Remarque, l’information retournée par cette fonction est en anglais.

 

Il vous est possible d’obtenir l’information WINDOW TYPE sous la forme d’une valeur numérique au lieu d’une chaîne de caractères. Pour ce faire, vous ne devez pas utiliser la fonction GetWindowType mais la fonction :

GetWindowTypeCode ()

 

Pour comprendre la signification de la définition d’une valeur retourné par cette fonction, il existe des constantes qui sont définies dans le fichier « HJCONST .JSH »

Dans ce fichier, vous trouverez des lignes du genre :

WT_BUTTON =1,

WT_EDIT =3,

 

« WT » signifie WINDOW TYPE .

 

Pour ne pas nous en arrêter ici, nous allons descendre encore un peu plus dans les profondeurs du détail. En effet, nous disposons d’une fonction qui nous retourne une information encore plus détaillée que WINDOWS TYPE CODE.

Il s’agit de WINDOWS SUB TYPE CODE.

Cette information s’obtient avec la fonction :

GetWindowSubTypeCode ()

 

Toutes ces fonctions seront nécessaires pour obtenir les informations d’une fenêtre, qui parfois, ne sont pas standards.

On dit alors qu’il s’agit d’une fenêtre usuelle.

Le fait de réassigner une classe de fenêtre usuelle à une classe de fenêtre standard, est appelé une opération d’assignation ou de reclassement.

 

Pour reclasser une fenêtre non standard, vous devez vous positionner sur la fenêtre concernée et réaliser le raccourci clavier Insère +7.

Dans la boîte de dialogue qui apparaît à l’écran, vous atterrissez dans une zone d’édition qui vous propose la classe actuelle de la fenêtre. Faites une seule fois tabulation et vous pourrez atteindre la liste des classes standard.  

 

Dès lors que vous aurez trouvé la classe approprié, faites tabulation jusqu’au bouton « Assigner classe » et pressez la touche entrée.

Une demande de confirmation apparaît, validez le bouton intitulé « ok ».

 

Parfois, il vous arrivera d’être obligés de tenter le reclassement d’une fenêtre sur plusieurs classes différentes avant d’obtenir satisfaction.

 

Identifier une fenêtre :

Une fenêtre possède une information qui permet de l’identifier, donc, de la distinguer des autres.

Le contrôle ID est un nombre arbitraire que le programmeur a utilisé pour marquer les fenêtres de son programme.

Pour obtenir cette information, vous devez utiliser la fonction :

GetControlID ()

 

Contrairement au WINDOW CLASS, le contrôle ID n’a pas de signification particulière. Il est juste un nombre arbitraire qui permet d’identifier une fenêtre. Normalement, dans un même programme, aucune des fenêtres ne doit posséder le même contrôle ID.

 

En revanche, rien ne garantit que, deux fenêtres issues de programmes différents, ne possèderont pas le même contrôle ID.

 

C’est pourquoi le système attribue une seconde information d’identification dès l’ouverture d’une fenêtre. Cette information sera attribuée à la fenêtre durant une session, c’est-à-dire durant son activité. Ainsi, en combinant les 2 identifiants, le système ne pourra pas confondre 2 fenêtres.

Cette information attribuée par le système est appelée WINDOW HANDLE, c’est-à-dire la poignée.

Cette information est un nombre.

Pour obtenir la poignée d’une fenêtre, vous pouvez utiliser les fonctions :

GetCurrentWindows () Et GetFocus ().

 

Par conséquent, si vous souhaitez que JAWS vous annonce la poignée de la fenêtre qui contient le curseur actif, vous pouvez passer GetCurrentWindow comme paramètre dans SayInteger :

La syntaxe : SayInteger (GetCurrentWindow ())

 

Remarque : La différence qui réside entre ces deux fonctions est que GetFocus ne suit pas le déplacement du curseur JAWS.

 

Un script vous permet d’obtenir le contrôle ID, le WINDOW CLASS et le WINDOW HANDLE en procédant comme suit :

 

Positionnez-vous sur une fenêtre, puis réalisez le raccourci clavier Insère +CTRL +F1.

JAWS vous ouvre une fenêtre intitulée « Informations techniques ».

Vous pourrez circuler à travers cette fenêtre avec vos flèches de déplacement habituelles afin de prendre connaissances des informations. Ensuite, pressez la touche « Échappement » pour refermer la fenêtre.

 

Par exemple, allez dans WORD, activez le menu déroulant et activez la fenêtre d’informations.

Vous constaterez que le WINDOW CLASS est MsoCommandBar.

 

Je vous propose un petit script qui demandera à JAWS de dire « Gagnée si la fenêtre courante est un menu, et « Perdu » dans le cas contraire.

Appelez votre script DireSiMenu et assignez-lui le raccourci clavier ALT +F5.

 

DireSiMenu ()

 

;Script qui vérifie si la fenêtre courante est un menu

If GetWindowClass (GetCurrentWindow ()) == "MsoCommandBar" Then

  ;La fenêtre est un menu

  SayString ("Bravo !")

Else

  ;La fenêtre n'est pas un menu

  SayString ("Perdu !")

EndIf

 

EndScript

 

La fonction GetCurrentWindow est passée en paramètre à la fonction GetWindowClass afin de préciser à cette dernière que nous nous intéressons à la fenêtre courante, c’est-à-dire celle qui possède le focus.

 

Maintenant, baladez-vous sur les différentes fenêtres de WORD, barre d’outils, menu déroulant, zone d’édition, et vous constaterez que le script vous annonce « Bravo » lorsque le focus est sur un menu.

Mais vous obtiendrez le même résultat, selon si vous êtes positionnez sur le menu déroulant, ou que si vous êtes dans le menu des couleurs de la police de caractères, dans la boîte de dialogue « Police ».

 

Nous constatons donc que la fonction GetWindowClasse ne distingue aucunement les différentes fenêtres de la famille des menus.

 

Pour continuer, je vous propose d’essayer la fonction GetWindowType à travers les différentes fenêtres de WINDOWS.

 

Lancez le script Manager puis le fichier « Default.JSS » en réalisant le raccourci clavier CTRL +MAJ +D.

A la fin du fichier, créez un nouveau script auquel vous lui assignerez le raccourci clavier ALT +F5.

Script DireWindowType ()

;JAWS va annoncer le type de la fenêtre courante

SayString (GetWindowType (GetCurrentWindow ()))

 

EndScript

 

Allez on continue ?

La fonction que nous venons d’utiliser nous retournait le WINDOW TYPE sous forme de chaîne de caractères. Il s’agissait de la fonction GetWindowType.

Utilisons cette fois la fonction GetWindowTypeCode qui nous retournera la même information, mais sous la forme d’un numérique au lieu d’une chaîne de caractères.

Par conséquent, nous allons utiliser la fonction GetWindowTypeCode.

 

Script ObtenirTypeCodeFenetre ()

 

;Obtenir le code numérique du type de la fenêtre courante

SayInteger (GetWindowTypeCode (GetCurrentWindow ()))

 

EndScript

 

Lors du premier survol des fonctions qui permettent d’identifier le type d’une fenêtre, nous avions également parlé de la fonction GetWindowSubTypeCode.

Cette fonction retourne le type de la fenêtre courante sous la forme d’un numérique et dont la précision de l’identification du type de la fenêtre est supérieure à la fonction GetWindowTypeCode.

 

Alors, je vous propose maintenant d’écrire un petit script afin d’en constater sa précision :

 

Script ObtenirSousTypeCodeFenetre ()

 

;Obtenir le sous code du type de la fenêtre courante

SayInteger (GetWindowSubTypeCode (GetCurrentWindow ()))

 

EndScript

 

La différence entre GetCurrentWindow et GetFocus :

 

Tout d’abord il faut bien comprendre que ces 2 fonctions sont généralement utilisées comme paramètre à l’intérieures d’autres fonctions.

Elles permettent ainsi de préciser, aux fonctions les intégrant, de quelle fenêtre le script s’intéresse.

 

GetCurrentWindow donne la poignée du curseur actif. Le curseur actif peut bien sûr être le curseur JAWS, c’est-à-dire le pointeur de la souris.

Par contre, GetFocus donne toujours la poignée du curseur PC.

 

Comme preuve, je vous propose un petit script qui vous permettra de lire le sous type code d’une fenêtre, d’abord avec la fonction GetCurrentWindow, et ensuite avec la fonction GetFocus.

Lorsque vous utiliserez le script, arrangez-vous pour que le curseur JAWS soit actif et placé sur une fenêtre autre que celle dans laquelle se trouve le focus.

Bien sûr, assignez un raccourci clavier au script afin que vous puissiez lui demander de lire les informations souhaitées après que vous ayez déplacé le curseur JAWS.

 

Script CompareFonctions ()

 

;Lecture du sous code du type de la fenêtre courante avec GetFocus

SayString ("Le résultat avec getFocus est")

SayInteger (GetWindowSubTypeCode (GetFocus ()))

 

;Lecture du sous code du type de la fenêtre courante avec GetCurrentWindow

SayString ("Le résultat avec getCurrentWindow est")

SayInteger (GetWindowSubTypeCode (GetCurrentWindow ()))

 

EndScript

 

Dans le script CompareFonctions, nous avons utilisé 2 fois la même fonction, GetWindowSubTypeCode, mais la première fois la lecture a été réalisée avec la fonction GetFocus comme paramètre,  alors que la deuxième fois nous avons utilisé GetCurrentWindow.

 

Dans certains cas, il conviendra d’utiliser l’une des fonctions plus qu’une autre.

Voici un exemple :

 

La fonction GetFirltChile retourne la poignée de la première fenêtre enfant de la fenêtre courante.

La fonction Getparent retourne la poignée de la fenêtre parent de la fenêtre courante.

Vous pouvez créer un petit script qui vous permettra de lire simultanément ces 2 informations. N’oubliez pas d’assigner un raccourci clavier au script afin de déclencher la lecture de ces 2 informations à partir de n’importe où.

 

Script LecturePoigneeEnfantParent ()

 

;Dire la poignée de la fenêtre parent

SayInteger (GetParent (GetCurrentWindow ()))

 

;Dire la poignée de la première fenêtre enfant

SayInteger (GetFirstChild (GetFocus ()))

 

EndScript ()

 

Maintenant je vous propose de tester deux scripts de lecture.

Le premier, C’est SayControl (), utilisé avec GetFocus en paramètre, il vous lira intégralement le contenu de la fenêtre courante.

Le deuxième, SayWindowTypeAndText (),utilisée avec la fonction GetCurrentWindow en paramètre, lira le maximum d’informations sur le nom et le type de la fenêtre courante.

 

 

Le mode HOME ROW

 

Pour obtenir un grand nombre d’informations portant sur les fenêtres et les contrôles, vous pouvez utiliser votre clavier dans un mode de circulation appelé, le mode HOME ROW.

 

Insère +Espace = Active le mode HOME ROW.

Insère +Espace = (Une seconde fois », désactive le mode HOME ROW.

 

Dès lors que vous avez activez ce mode, vous pouvez vous déplacer à travers les fenêtres et les contrôles de votre applications en utilisant les touches de circulations suivantes :

Tabulation : fenêtre suivante à un même niveau hiérarchique.

MAJ +TAB : fenêtre précédente à un même niveau hiérarchique.

F2 : Première fenêtre enfant.

MAJ +F2 : fenêtre parent.

 

En circulant dans l’arborescence des fenêtres, au lieu d’entendre les informations des fenêtres de façon ordinaire, vous pouvez sélectionner vous-mêmes les informations que vous souhaitez entendre, par exemple, la classe, le type, le sous type ETC

Le type de l’information à entendre sera appelé, le mode OUTPUT.

 

On sélectionne le mode OUTPUT que l’on désire entendre en pressant autant de fois que nécessaire la touche de fonction F3.

Ensuite, vous pouvez vous déplacer. Par exemple, si vous souhaitez entendre les classes de fenêtres dans votre boîte de dialogue « Police » à l’intérieur de WORD, veuillez procéder comme suit :

 

Ouvrez WORD, activez le mode HOME ROW en réalisant le raccourci clavier Insère +Espace, puis activez la fenêtre « Police » en réalisant le raccourci clavier CTRL +D.

Choisissez le mode OUTPUT « Classe » en pressant autant de fois que nécessaire la touche F3.

D’ailleurs, vous pouvez sélectionner le mode OUTPUT en marche arrière en réalisant le raccourci clavier MAJ +F3.

Maintenant, déplacez-vous avec TAB et MAJ +TAB.

A chaque fois que vous arriverez sur une fenêtre, JAWS ne vous dira plus le nom et l’état de cette dernière, mais sa classe.

Vous pouvez faire répéter cette information en pressant la touche F1. Pour que JAWS vous épelle cette information, pressez 2 fois rapidement la touche F1 le mode épellation ne fonctionne pas sur les informations de type intégrale.)

 

F2 déplacera le curseur JAWS à la première fenêtre enfant de la fenêtre courante et déclanchera la lecture de l’information demandée selon le mode OUTPUT choisi avec F3.

 

MAJ +F2 déplacera le curseur JAWS à la fenêtre parent de la fenêtre courante et déclanchera la lecture de l’information demandée selon le mode OUTPUT choisi avec F3.

 

Maintenant nous allons réaliser un script qui nous permet d’atteindre le bouton « Ouvrir » de la boîte de dialogue « Ouvrir » du bloc notes.

Lancez le bloc notes.

Activez la boîte de dialogue « Ouvrir » en réalisant le raccourci clavier CTRL +O.

Faites tabulation jusqu’au bouton intitulé « Ouvrir ».

Activez le mode Home Row en réalisant le raccourci clavier Insère +Espace.

Pour obtenir le Contrôle ID de la fenêtre courante, donc du bouton, choisissez le mode OUTPUT intitulé « Commande » avec la touche F3.

 Ensuite, écoutez le contrôle ID en pressant la touche F1.

Normalement, le contrôle ID est 1.

Désactivez le mode Home Row en réalisant une nouvelle fois le raccourci clavier Insère +Espace.

Remarque :

Vous auriez pu obtenir cette information en faisant afficher une fenêtre d’informations de la fenêtre courante, en réalisant le raccourci clavier Insère CTRL +F1.

Maintenant vous pouvez créer le script et l’assigner à une touche.

La fonction SetFocus permet d’atteindre une fenêtre. En paramètre, nous allons utiliser la fonction FindDescendantWindow qui nécessite deux paramètres, la fenêtre d’où débute la recherche, et le contrôle ID de la fenêtre recherchée.

Pour le paramètre qui permet de préciser d’où débute la recherche, nous pouvons utiliser la fonction GetRealWindow(GetFocus()) qui indique la première fenêtre réelle parent située hiérarchiquement à un niveau supérieur, et pour la fenêtre à atteindre, le Contrôle ID de la fenêtre, donc du bouton « Ouvrir ».

Voici ce que ça donne :

Script AllerSurBoutonOuvrir ()

setFocus(FindDescendantWindow(GetRealWindow(GetFocus()),1))

EndScript

 

 

Les fenêtres SDM

 

Les fenêtres SDM sont des fenêtres qui ne se manipuleront pas comme les fenêtres standard de WINDOWS.

 

Dans une fenêtre SDM, les contrôles ne sont pas des fenêtres, enfants des parents dialogue, car elles ne sont pas des fenêtres séparées du tout. Ainsi, elles n’ont pas leur propre poignée.

 

Pour savoir si une fenêtre est de type SDM, positionnez le focus sur la fenêtre, puis réalisez le raccourci clavier Insère +CTRL +F1.

Une fenêtre contenant des informations techniques apparaît à l’écran.

Dans l’information portant sur la classe, si les lettres SDM n’y figurent pas, c’est que la fenêtre contenant le focus n’est pas une fenêtre SDM.

 

Par exemple, allez dans la boîte de dialogue « Ouvrir » de WORD, et vous pourrez constater que certains des contrôles sont de type SDM.

Vous constaterez également que la poignée du contrôle est souvent identique à la fenêtre le contenant.

 

Alors comment peut-on faire, à l’intérieur d’un script,  pour identifier le type du contrôle sur lequel est positionné le curseur ?

 

En fait, nous partons du principe que, même si les poignées des fenêtres SDM sont identiques, il n’en sera pas de même pour le contrôle ID.

 

Pour identifier ce type de fenêtres, il existe 2 fonctions :

SDMGetCurrentControl et SDMGetNextControl.

 

A titre d’exemple, créez le script que vous assignerez à un raccourci clavier.

Ensuite, retournez dans la fenêtre « Ouvrir » de WORD et testez le script sur les différents contrôles de la boîte de dialogue.

 

Script DireControlIDSdm ()

 

;Dire le contrôle ID de la fenêtre SDM courante

SDMSayControl (GetFocus (),SDMGetCurrentControl ())

 

EndScript

 

Vous constaterez alors que JAWS vous lit le nom du contrôle ainsi que son type.

 

Philippe BOULANGER