Changez l'apparence du bureau de windows et gagnez de la place !

Soyez le premier à donner votre avis sur cette source.

Vue 19 083 fois - Téléchargée 609 fois

Description

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 / Exemple :


#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.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

De rien ^^ et bonne prog !
Messages postés
1
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
1 février 2008

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.
Messages postés
17
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
9 septembre 2005

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)
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

mais nan, merci quand meme d'avoir donné la soluce
Messages postés
12
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
12 septembre 2006

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++
Afficher les 30 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.