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

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

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.