Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :


Comment modifier la barre des tâches

Date de publication : 26/04/2002

Date de mise a jour : 26/04/2002

Par Laurent LE BRUN
 

Ce cours a pour but de vous faire découvrir différents effets que l'on peut faire sur la barre des tâches. Vous apprendrez ainsi a déplacer, redimensionner et déplacer le bouton du menu "Démarrer". Vous pourrez même cacher la barre des tâches toute entière ou masquer l'horloge de Windows.

Ce cours a été réalisé à partir de Delphi 5, version professionnelle et sous Windows 98. Je ne vous garantis rien sous les autres versions de Delphi ou sur d'autres systèmes d'exploitation.
Si vous possédez une configuration différente, veuillez me contacter et m'indiquer si ça marche ou pas.


1. Trouver les Handles
2. Petits effets amusants


1. Trouver les Handles


Pour trouver le handle de la barre des tâches, on utilise la fonction FindWindow avec comme nom de classe 'Shell_TrayWnd'.
Ce qui donne :

var Tray: hWnd; Begin Tray := FindWindow('Shell_TrayWnd', NIL);
Le handle de la barre des tâches est ainsi récupéré dans la variable Tray. Le bouton "Démarrer" est un enfant de la barre des tâches. Pour obtenir son handle, on se sert de la fonction GetWindow en prenant soin de mettre GW_CHILD pour le paramètre uCmd.
Mais, la barre des tâches possède 3 enfants :

  • 'Button'(le bouton Démarrer)
  • 'ReBarWindow32' (la partie centrale)
  • 'TrayNotifyWnd' (la partie de droite, avec l'heure).

On va donc utiliser une boucle pour trouver 'Button' :

var Tray, Child : hWnd; C : Array[0..127] of Char; Begin Tray := FindWindow('Shell_TrayWnd', NIL); Child := GetWindow(Tray, GW_CHILD); While Child <> 0 do Begin If GetClassName(Child, C, SizeOf(C)) > 0 Then Begin If UpperCase(StrPAS(C)) = 'BUTTON'Then Begin // instructions End; End; Child := GetWindow(Child, GW_HWNDNEXT); End; End;
Le handle correspondant au bouton "Démarrer" est contenu dans Child. Pour obtenir les handles des autres parties de la barre, changez 'Button' par celui désiré ('ReBarWindow32' ou 'TrayNotifyWnd').


2. Petits effets amusants


A partir du handle, on peut modifier la barre des tâches. Pour la cacher, on utilise la fonction ShowWindow :

var Tray: hWnd; Begin Tray := FindWindow('Shell_TrayWnd', NIL); ShowWindow(Tray, SW_HIDE);
On peut aussi cacher le bouton Démarrer, en reprenant l'exemple pour trouver le handle du menu Démarrer. Et on y insère la ligne :

ShowWindow(Child, SW_HIDE);
Pour le réafficher, on remplace SW_HIDE par SW_NORMAL. Cependant, même lorsqu'il est caché, on peut accéder au menu Démarrer par la touche Windows. En effet, le bouton est toujours fonctionnel. Vous en avez marre de ce Menu Démarrer ? Alors, détruisez-le ! non! en fait, le fermer suffira... Pour cela, il suffit juste d'envoyer un message WM_DESTROY à ce bouton :

SendMessage(Child,WM_CLOSE,0,0);
Pour le revoir, il faut exécuter le fichier "Explorer.exe". Hors programme, faîtes Ctr-Alt-Suppr, sélectionnez "Explorer", puis "Fin de Tâche". Attendez, la fenêtre "Arrêt de Windows" apparaît. Attendez encore jusqu'à ce qu'une autre fenêtre s'ouvre et cliquez sur "Fin de tâches" (je ne sais pas si j'ai été assez clair, sinon, redémarrez Windows (avec Alt-F4)!). En utilisant SW_MAXIMIZE avec le handle du menu Démarrer, le bouton occupe toute la place de la barre des tâches !
Pour le remettre à sa place, là encore, on utilise SW_NORMAL. Essayez avec SW_MINIMIZE. On obtient une petite barre flotante dans la barre des tâches. En double cliquant dessus, elle se retransforme en bouton ! Si vous voulez afficher un texte dans cette petite barre, insérez l'instruction suivante juste avant :

SetWindowText(Child,'CouCou !');
Et que diriez-vous de déplacer le bouton Démarrer ? Pour cela, on utilise la fontion MoveWindow. Essayez le code suivant pour voir un le bouton Démarrer qui traverse l'écran ! Vous devez d'abord placer un timer sur votre fiche avec un interval très faible (1, par exemple).

procedure TForm1.Timer1Timer(Sender: TObject); var Tray, Child : hWnd; C: Array[0..127] of Char; x: integer; begin inc(x,2); if x>Screen.Width then x := -75; Tray := FindWindow('Shell_TrayWnd', NIL); Child := GetWindow(Tray, GW_CHILD); While Child <> 0 do Begin If GetClassName(Child, C, SizeOf(C)) > 0 Then If UpperCase(StrPAS(C)) = 'BUTTON'then MoveWindow(Child,x,0,75,19,true); Child := GetWindow(Child, GW_HWNDNEXT); End; end;
En modifiant les paramètres de MoveWindow, on peut modifier la position et les dimensions du bouton Démarrer.
Vous trouverez ici (8 Ko, en zip) un petit programme qui reprend les principales idées de ce cours. Il permet entre autres de déplacer et de redimensionner le bouton Démarrer. Il permet aussi de cacher, agrandir, réduire toutes les parties de la barres des tâches.

Ceci étant mon premier cours, j'espère qu'il a été suffisamment clair. Je vous conseille vivement de jeter un oeil dans l'aide de Delphi, consacrée aux api Windows. Tous les paramètres possibles dans les fonctions telles que ShowWindow, FindWindow, GetWindow et MoveWindow sont expliqués.
Si toutefois, vous avez un problème ou si vous ne comprenez pas, n'hésitez surtout pas à m'écrire.
Tout commentaire, suggestion, remarque ou question sont les bienvenus.


Un mot d'encouragement ou un compliment fait toujours plaisir.

LLB/DeuSSuM



Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Responsable bénévole de la rubrique Delphi : Alcatîz -