Comment modifier la barre des tâches

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 à déplacer, redimensionner le bouton du menu « Démarrer ». Vous pourrez même cacher la barre des tâches tout 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. ♪

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. 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 :

 
Sélectionnez
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 trois 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' :

 
Sélectionnez
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').

II. Petits effets amusants

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

 
Sélectionnez
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 :

 
Sélectionnez
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 d'envoyer un message WM_DESTROY à ce bouton :

 
Sélectionnez
SendMessage(Child,WM_CLOSE,0,0);

Pour le revoir, il faut exécuter le fichier « Explorer.exe ». Hors programme, faites Ctr-Alt-Suppr, sélectionnez « Explorer », puis « Fin de Tâche ». Attendez, la fenêtre « Arrêt de Windows » apparait. 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 flottante 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 :

 
Sélectionnez
SetWindowText(Child,'CouCou !');

Et que diriez-vous de déplacer le bouton Démarrer ? Pour cela, on utilise la fonction 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 intervalle très faible (1, par exemple).

 
Sélectionnez
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 barre des tâches.

Ceci étant mon premier cours, j'espère qu'il a été suffisamment clair. Je vous conseille vivement de jeter un œil 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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2002 Laurent Le Brun. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.