Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHANGEZ L'APPARENCE DU BUREAU DE WINDOWS ET GAGNEZ DE LA PLACE !


Information sur la source

Catégorie :API Niveau : Initié Date de création : 30/05/2005 Date de mise à jour : 31/05/2005 19:04:23 Vu / téléchargé: 13 733 / 509

Note :
9,15 / 10 - par 13 personnes
9,15 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (30)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Bonjour à tous et à toutes !

Qui n'a jamais eu l'impression que son Bureau Windows était un véritable Capharnaüm ?
Qui n'en n'a jamais eu marre de rechercher 5 minutes son icône parmi les 50 autres sur le Bureau ?

En utilisant Spy++, j'ai vu que le bureau n'est en fait qu'un simple contrôle de liste (class "SysListView32").

Les ListViews possèdent plusieurs style (avec leur équivalent d'affichage dans l'Explorateur Windows):
LVS_ICON (équivalent "Icône")
LVS_SMALLICON (équivalent "Icône" mais avec de petites images)
LVS_LIST (équivalent "Liste")
LVS_REPORT (équivalent "Détail")

Par défaut le bureau de Windows est à LVS_ICON.
Mon idée est toute simple, je souhaiterais que les icônes du bureau soient plus petite mais que nous gardions le glisser déplacer.
Nous devons donc utiliser le style LVS_SMALLICON.

Maintenant que nous savons ce que nous voulons faire, voici les étapes nécessaires pour réussir à changer le bureau
1 - Retrouver le HWND de la fenêtre ListView
2 - Changer son style



1 - Retrouver le HWND de la fenêtre ListView

Nous allons utiliser l'API FindWindowEx pour parvenir à nos fins...
En examinant Spy++, on voit que le contrôle ListView est un enfant de "SHELLDLL_DefView" qui lui même est enfant de "Program".
Ca parait difficile mais ce n'est que 3 lignes de code....

2 - Changer le style de la ListView

On utilisera l'API GetWindowLong (ou GetWindowLongPtr pour se préparer aux 64bits) pour récupérer le style du contrôle via le paramètre GWL_STYLE.
Puis, en appliquant un masque sur le style courant, on va pouvoir retirer le style d'affichage et garder les autres styles qui 'n’ont pas forcément de rapport avec notre but.
On validera le nouveau style avec la fonction SetWindowLong.

3 - Transparence !

Ca a failli être terminé !
Il manque néanmoins la transparence de la liste qui vous permettra de conserver le top model en fond d'écran intact ^^.

Pour cela il faut envoyer les messages :
- LVM_SETTEXTBKCOLOR (Brush à CLR_NONE) - permet de garder le fond de la liste transparent
- LVM_SETTEXTCOLOR (couleur blanche de préférence, à customiser !) - change la couleur du texte

Pour terminer, une mise à jour visuelle du contrôle, ça ne coûte pas plus cher avec la fonction InvalidateRect.


Voilà, vous êtes maintenant prêts à avoir un bureau que tous vos collègues vous envieront 8).
Je vous invite à jouer sur la couleur de la police (LVM_SETTEXTCOLOR) ou éventuellement rendre le contrôle transparent (sujet probablement traité dans les colonnes de cppfrance).

Bon développement ^^
Poppyto
http://www.poppyto.net
 

Source

  • #include <windows.h>
  • #include <commctrl.h>
  • int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  • {
  • //Retrouver le HWND de la ListView du Bureau
  • //Find the Desktop ListView HWND
  • HWND Manager = FindWindowEx(0,0,"Progman","Program Manager");
  • HWND ShellDLL = FindWindowEx(Manager,0,"SHELLDLL_DefView",NULL);
  • HWND List = FindWindowEx(ShellDLL,NULL,"SysListView32",0);
  • // Récupérer le style actuel de la ListView
  • // Get the actual style for ListView
  • LONG Style = GetWindowLong(List,GWL_STYLE);
  • // On enlève le style d'affichage dans le style en masquant
  • // We mask the value of the style in order to del the style view
  • LONG Mask = LVS_ICON | LVS_SMALLICON | LVS_LIST | LVS_REPORT;
  • Mask = ~Mask;
  • Style = Style & Mask;
  • //On choisi le style d'affichage à appliquer à la liste
  • //Le style d'origine est LVS_ICON
  • //We chose the new style view for the ListView
  • //The default style is LVS_ICON
  • Style = Style | LVS_SMALLICON;
  • //On applique le style
  • //We apply the style
  • SetWindowLong(List,GWL_STYLE,Style);
  • //On redonne la transparence à la ListView et
  • //on change la couleur du texte
  • //We set the background of the ListView as transparency
  • //and we change the color text
  • SendMessage(List,LVM_SETTEXTBKCOLOR,0,CLR_NONE);
  • SendMessage(List,LVM_SETTEXTCOLOR,0,RGB(255,255,255));
  • //On met à jour l'affichage du contrôle
  • //We update the control
  • InvalidateRect(List,0,TRUE);
  • return NULL;
  • }
#include <windows.h>
#include <commctrl.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{



	//Retrouver le HWND de la ListView du Bureau
	//Find the Desktop ListView HWND

	HWND Manager = FindWindowEx(0,0,"Progman","Program Manager");
	HWND ShellDLL = FindWindowEx(Manager,0,"SHELLDLL_DefView",NULL);
	HWND List = FindWindowEx(ShellDLL,NULL,"SysListView32",0);




	// Récupérer le style actuel de la ListView
	// Get the actual style for ListView

	LONG Style = GetWindowLong(List,GWL_STYLE);

	
	
	// On enlève le style d'affichage dans le style en masquant
	// We mask the value of the style in order to del the style view 
	
	LONG Mask = LVS_ICON | LVS_SMALLICON | LVS_LIST |  LVS_REPORT;
	Mask = ~Mask;
	Style = Style & Mask;




	//On choisi le style d'affichage à appliquer à la liste
	//Le style d'origine est LVS_ICON
	//We chose the new style view for the ListView
	//The default style is LVS_ICON
	
	Style = Style | LVS_SMALLICON;



	//On applique le style
	//We apply the style

	SetWindowLong(List,GWL_STYLE,Style);
	
	
	
	//On redonne la transparence à la ListView et
	//on change la couleur du texte
	//We set the background of the ListView as transparency
	//and we change the color text	

	SendMessage(List,LVM_SETTEXTBKCOLOR,0,CLR_NONE);
	SendMessage(List,LVM_SETTEXTCOLOR,0,RGB(255,255,255));

	
	//On met à jour l'affichage du contrôle
	//We update the control
	
	InvalidateRect(List,0,TRUE);


	return NULL;
}

Conclusion

Pour rétablir la configuration d'origine, redémarrez votre ordinateur :o) Je plaisante bien entendu, il suffit de changer la ligne :

Style = Style | LVS_SMALLICON;

par

Style = Style | LVS_ICON;

et le tour est joué !
Personnellement j'ai mis ce programme dans une clé de registre HKLM/Software/Microsoft/Windows/Current Version/Run/ afin qu'il démarre automatiquement. Pour les moins expérimentés, un raccourci dans Programme->Démarrage fera amplement l'affaire.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

31 mai 2005 19:04:23 :
Apparemment il n'est possible de changer la couleur du texte qu'en style LVS_REPORT.

Commentaires et avis

signaler à un administrateur
Commentaire de Joky le 31/05/2005 09:30:18

Il est très organisé mon Bureau qu'est-ce-tu me dis toi lol ?

Non en faite, j'aime assez ta façon de partir d'une chose, et ta façon d'en conclure !
Genre ta commencer par apercevoir que le bureau c'était qu'une listview, donc les styles possibles etc...
Et rien que pour cette façon d'arriver à tes fins j'vé te mettre une bonne note, lol même si bien évidemment, les icônes sont mieux :) que les listes voyons...

http://membres.lycos.fr/joky/Bureau.JPG

signaler à un administrateur
Commentaire de Joky le 31/05/2005 09:31:37

Il veut pas noter :'(
J'aurais voulu mettre 8/10 mais marche pas désolé lol

signaler à un administrateur
Commentaire de sebmafate le 31/05/2005 15:52:47 administrateur CS

joli bureau Joky ;)

signaler à un administrateur
Commentaire de Joky le 31/05/2005 15:59:41

Lol merci :)
Grâce à mon bureau on voit tout de suite que jsuis pas mal con quand même :)
Jsuis sous windows, et j'met un style Mac mdr
Ca tue ;)

signaler à un administrateur
Commentaire de MuPuF le 31/05/2005 18:20:57

LOL ton bureau, moi j'ai des raccourcis partout vers des dossiers en contenant d'autre !!! + 2/3 petits dir contenant des cppfrance's code.
Et en fond, la sublime tarja (je parle de la voix voyons ;-)) du groupe bien sympathique Nightwish (a ne surtout pas écouter quand on doit coder dans l'urgence ...)

signaler à un administrateur
Commentaire de poppyto le 31/05/2005 20:04:14 administrateur CS

>> Il est très organisé mon Bureau qu'est-ce-tu me dis toi lol ?

lol tu fais parti des rares non bordéliques ^^

>Non en faite, j'aime assez ta façon de partir d'une chose, et ta façon d'en
>conclure ! Genre ta commencer par apercevoir que le bureau c'était qu'une listview,
>donc les styles possibles etc...Et rien que pour cette façon d'arriver à tes fins
>j'vé te mettre une bonne note, lol même si bien évidemment, les icônes sont mieux :)
>que les listes voyons...

Bien entendu en programmation c'est la démarche qui compte, les API sont les outils ^^

>http://membres.lycos.fr/joky/Bureau.JPG

Joli bureau et pas bordélique en effet ^^

signaler à un administrateur
Commentaire de Joky le 31/05/2005 23:03:26

Ce n'est qu'un camouflage, j'ai moi aussi quelques défaut de rangements surtout les sources de cppfrance, d'ailleurs je m'adresse aux admins, pourquoi il changerai pas les noms des fichiers zip ???

Et pour cette façon de programmer, je ne procède pas du tout pareil...
Alors comment je fais moi, je mange un ptit pain au chocolat, et tadaaaaaa une idée de prog, donc je code le début, pi finalement j'vois que c'est trop dur, et hop j'arrête, c'est s'qu'on apelle de la détermination ça lol :)

signaler à un administrateur
Commentaire de magic_Nono le 01/06/2005 10:09:41

Bonne démarche
Bonne prog
Bons commentaires

=> une bonne note meme si ce ne sera pas une solution que je retiendrai personnellement

Bonne prog

Bruno.

signaler à un administrateur
Commentaire de poppyto le 01/06/2005 20:15:32 administrateur CS

>> Alors comment je fais moi, je mange un ptit pain au chocolat, et tadaaaaaa une
>> idée de prog, donc je code le début, pi finalement j'vois que c'est trop dur, et
>> hop j'arrête, c'est s'qu'on apelle de la détermination ça lol :)

Pas mal mais je suis plus "pain au lait" ^^. La détermination...mmm ça dépend, faut faire dans la limite de la capacité à apprendre ^^

Thanxs Bruno :)

signaler à un administrateur
Commentaire de srtg1 le 01/06/2005 22:28:01

Une idee pour passer les 4 modes les uns apres les autres en relancant l'exe

...
LONG Style = GetWindowLong(List,GWL_STYLE);


if (Style==0x56002b41) // LVS_REPORT
SMALL=TRUE;

if (Style==0x56002b42) // LVS_SMALLICON
LIST=TRUE;

if (Style==0x56002b43) // LVS_LIST
BIG=TRUE;

if (Style==0x56002b40) // LVS_ICON
REPORT=TRUE;

// On enlève le style d'affichage dans le style en masquant
// We mask the value of the style in order to del the style view

LONG Mask = LVS_ICON | LVS_SMALLICON | LVS_LIST |  LVS_REPORT;
Mask = ~Mask;
Style = Style & Mask;

//On choisi le style d'affichage à appliquer à la liste
//Le style d'origine est LVS_ICON
//We chose the new style view for the ListView
//The default style is LVS_ICON
if (REPORT==TRUE)
Style = Style | LVS_REPORT;

if (BIG==TRUE)
Style = Style | LVS_ICON;

if (SMALL==TRUE)
Style = Style | LVS_SMALLICON;

if (LIST==TRUE)
Style = Style | LVS_LIST;

//On applique le style
//We apply the style
SetWindowLong(List,GWL_STYLE,Style);

//On redonne la transparence à la ListView et
//on change la couleur du texte
//We set the background of the ListView as transparency
//and we change the color text

SendMessage(List,LVM_SETTEXTBKCOLOR,0,CLR_NONE);
SendMessage(List,LVM_SETTEXTCOLOR,0,RGB(255,255,255));

...

signaler à un administrateur
Commentaire de poppyto le 01/06/2005 23:22:55 administrateur CS

Bonne idée :o)
Pour la détection du style atcuel, ça serait mieux comme ça

if (Style & LVS_REPORT) // LVS_REPORT
SMALL=TRUE;

if (Style & LVS_SMALLICON) // LVS_SMALLICON
LIST=TRUE;

if (Style & LVS_LIST) // LVS_LIST
BIG=TRUE;

if (Style & LVS_ICON) // LVS_ICON
REPORT=TRUE;

signaler à un administrateur
Commentaire de Joky le 02/06/2005 17:02:23

Jvoulais rajouter !!!
étant amateur de gratte également ;)
J'adore ton site lol
J'ai presque faillit pleurer quand j'ai vu le gars jouer Little Wing :'(
Mon dieu, c'est trop émoutant :(-:(-:(-
Merveilleux en tout cas !!!
T'exerce dans beaucoup de domaine quand même on dirait lol

signaler à un administrateur
Commentaire de sebmafate le 02/06/2005 17:10:24 administrateur CS

raaaahhhh... je savais bien que Poppyto ca me disait quelque chose lol...
Mouarf... c'est vrai je ne suis plus présent sur le forum de Spider :(

signaler à un administrateur
Commentaire de poppyto le 02/06/2005 18:39:22 administrateur CS

>> Joky

Héhé c'est mon frangin le gratteux ;o) Je lui transmettrai tes amitiés :o)

>> sebmafate

Mmm t'as l'air d'être codeur cSharp...si t'as un peu de temps libre, tu serais intéressé de coder en csharp asp.net pour un de mes projets (plus en pv)

Stef

signaler à un administrateur
Commentaire de MuPuF le 02/06/2005 19:02:36

AH AH UN GRATEUX UN GRATEUX !! J'adore, par contre, t'a pas plus avancé que avancé pour la grate, car ya bien plus dur lol ... A croire que je suis vraiment maso ... Le solo de Final Tragedy de dream theater serait dans quelle catégorie ? Dieu des Dieu parmis les Dieu ? bon, je dis ça en passant car c'est pas içi que je devrai poster ça... ;-)

signaler à un administrateur
Commentaire de poppyto le 02/06/2005 20:02:36 administrateur CS

J'aime pas Dream Theater donc je ne le classerais même pas :oP. Effectivement il y a toujours plus dur, mais déjà quand tu taquines bien dans la rubrique avancé, c'est que t'as pas vraiment besoin du site ...

Stef

signaler à un administrateur
Commentaire de MuPuF le 02/06/2005 20:38:24

c'est juste ... Et pour Dream, ben c'est sur que c'est pas pareil que satriani ;-)
Aussi je trouve que ton site est vraiment pas mal pour debuter, et j'ai enfin trouvé la vrai CALIFORNICATION lol, si tu voyais les horreurs qu'on peux voir trainer ...

signaler à un administrateur
Commentaire de poppyto le 02/06/2005 20:48:57 administrateur CS

C'est à cause de la pénuerie des cotons de tige et du manque de modérateurs...je prend aucune tab sur le net, je préfère prendre 30 minutes pour décrypter un solo, au moins ça m'apprend quelque chose :D

Stef

signaler à un administrateur
Commentaire de MuPuF le 02/06/2005 21:28:38

ah tout a fait d'acc, faudrait que je le fasse, mais comme j'ai pas trop de tps pour la grate (juste 5h00/semaine;-) je prefere pour l'instant me concentrer sur le jeu que sur l'oreille (je l'ais travaillée 4 ans a l'école de zique)

signaler à un administrateur
Commentaire de Joky le 03/06/2005 16:19:18

Ouai mais vous glorifier la rubrique Initié là !!!
Moi j'ai regarder un peu Débutant :)
Bé c'est dur quand même mdr...
J'vais rester sur mon bon vieux Ben Harper :)

Tiens donc, au passage, remercions Cppfrance qui prend une tournure mélomane :)

signaler à un administrateur
Commentaire de sebmafate le 03/06/2005 16:26:39 administrateur CS

Joky --> ce n'est pas parce qu'on code qu'on est pas musicien :p
j'en suis un bonne exemple : 3 ans de basse, 15 ans de cor d'harmonie :)

signaler à un administrateur
Commentaire de Joky le 03/06/2005 16:34:36

J'ai jamais dis le contraire !!!
Moi j'ai une gratte depuis ke jai 12 ans, j'lé prise pour la premiere fois ya 6 mois mdr ( jai 17 ans hein :) )
Et la y'a pas longtemp me suis acheté ma premiere gratte elec lol jsuis tout ému, bon c'est ptete pas une tip top niveau qualité, mais c'est pas mal :)
Une tite Cort  M200 toute noire jolie :p
lol

signaler à un administrateur
Commentaire de MuPuF le 03/06/2005 17:38:35

hey hey, et moi une ibanez grx, sinon, je gratouille depuis juillet et pendant 6 mois avec une folk (aille les doigts) et depuis 5 mois ma petite ibanez...
Mais // je prend des cours donc, ça aide, meme si je joue milord lol et que je vais le presenter a la fete de la musique (cool ........) avec obladi oblada des beetles et fais comme l'oiseau (et plante toi comme quand il est bourré lol)

signaler à un administrateur
Commentaire de smoof le 05/06/2005 03:56:24

Super cool la manip.
Voici ma solution pou le défilement des styles :

      LONG Mask = LVS_ICON | LVS_SMALLICON | LVS_LIST | LVS_REPORT;

       //Enregistrement du style courrant
       //We save the current style
       LONG OldStyle=Style&Mask;

       // On enlève le style d'affichage dans le style en masquant
       // We mask the value of the style in order to del the style view
      
       Mask = ~Mask;
       Style = Style & Mask;
    
    
       //We chose the new style view for the ListView
       //On choisi le style d'affichage à appliquer à la liste
    
       switch(OldStyle){
                        case LVS_ICON:  
                               Style = Style |LVS_SMALLICON;
                               break;
                        case LVS_SMALLICON:  
                               Style = Style |LVS_LIST;
                               break;
                        case LVS_LIST:  
                               Style = Style |LVS_REPORT;
                               break;
       //Le style d'origine est LVS_ICON
       //The default style is LVS_ICON
                        default:  
                               Style = Style |LVS_ICON;
                               }

voualou...
bone zique, bientot ;)

signaler à un administrateur
Commentaire de zytry le 11/08/2005 23:54:48

Bonjour,
je ne suis pas un expert en cpp mais je viens de tester le programme et je ne vois pas de changement (sauf la couleur du texte),
en fait je suis sous win 2000 et je voulais savoir si j'étais le seul dans ce cas là ? (ou j'ai ptet fait une fausse manip')
merci d'avance ;)

signaler à un administrateur
Commentaire de zytry le 12/08/2005 12:28:50

Bon.. en fait il ne faut pas avoir Active Desktop activé sinon ça ne marche pas (dans le meilleur des cas) ou ça plante (au pire ^^)
Voilà, deux heures pour trouver ça.. honte à moi, a++

signaler à un administrateur
Commentaire de MuPuF le 12/08/2005 12:39:54

mais nan, merci quand meme d'avoir donné la soluce

signaler à un administrateur
Commentaire de virlix le 09/09/2005 09:21:17

perso j'adore. 10/10.
Il serait cool de pouvoir changer la grille du bureau. J'entend par la que les icones sont maintenant petits mais en placement automatique (ca fait plus propre) ils sont toujours aussi eloignés (colonnement parlant bien sur :o)

signaler à un administrateur
Commentaire de bienhoa06 le 01/02/2008 20:40:32

Je ne comprends rien à la programmation. Je suis arrivé sur ce site par hasard. Je n'aime pas avoir un bureau bordélique. Super, grâce à vous j'ai trouvé la solution.
Votre programme correspond à mes souhaits. En revanche, pour l'installer j'ai un peu galéré. Alors le Web m'a apporté une aide précieuse. Je ne savais vraiment pas quoi faire. J'ai trouvé un logiciel Dev C+ (fichiers ccp) je crois, je l'ai installé et avec un peu de chance j'ai réussi à avoir un bureau qui me plaît grâce à vous. Pourtant je travaille sur deux écrans mais cela me laisse beaucoup de place.
Je vous remercie pour cet excellent programme. A 62 ans je crois que je vais m'intéresser de plus près à la programmation. Pourquoi pas? Ce site est là pour que je puisse apprendre. Merci à tous. Stéphane.

signaler à un administrateur
Commentaire de poppyto le 02/02/2008 08:04:59 administrateur CS

De rien ^^ et bonne prog !

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.