Personnalisation automatisée du menu Démarrer [Résolu]

Le coin des administrateurs et des développeurs. Astuces techniques, ...
Répondre
amstramgram
Messages : 5
Enregistré le : jeu. 26 août 2010 15:54
Etes vous un robot ? : Non

Personnalisation automatisée du menu Démarrer [Résolu]

Message par amstramgram »

Bonjour à toutes et à tous…

Je me suis lancé dans une vaste opération de personnalisation automatisée de Windows 7 et je me heurte à un méchant problème. Il s’agit de transférer un menu démarrer avec tous les raccourcis qui vont bien et rangés à ma manière à moi.
Pour cela, j’ai rédigé un script basique en vbs qui réalise les opérations suivantes :

- Suppression du contenu du dossier commun "C:\ProgramData\Microsoft\Windows\Start Menu\Programs".
- Remplacement par mon contenu à moi
- Suppression du contenu du dossier "C:\Users\mon_Nom\AppData\Roaming\Microsoft\Windows\Start Menu\Programs".
- Remplacement par mon contenu à moi.
- Attribution des attributs HSA aux fichiers "desktop.ini".

Le script effectue sa tâche sans renâcler, mais, les éléments "système" du menu démarrer (dossiers "Accessoires", "Démarrage", etc) perdent leur francisation dans l'opération et moi mon latin.

Si l'un(e) des quelques génies qui hantent ce forum avait la bonté d'éclairer ma lanterne, je lui en saurais infiniment gré.

Bien à vous.

Laurent.

Petit extrait du code:

Code : Tout sélectionner

Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

'récupération du chemin du script vbs en cours
pathFile =  left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))

'Récupération du chemin du menu démarrer "tous les utilisateurs"
path = WshShell.SpecialFolders("AllUsersStartMenu")

'Récupération du chemin du menu démarrer de l'utilisateur
pathUser = WshShell.ExpandEnvironmentStrings("%UserProfile%")

'Suppression du contenu du menu démarrer "tous les utilisateur"
fso.deletefolder path & "\Programs", True

'Copie du Menu Démarrer "AllUsers"
fso.copyFolder pathFile & "\MenuAll\Programs" , path & "\Programs"

Set objFile = fso.GetFile(path & "\Programs\Desktop.ini")
objFile.Attributes = 38

'Suppression du contenu du menu démarrer de l'utilisateur
fso.deletefolder pathUser & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs", True

'Copie du Menu Démarrer "AllUsers"
fso.copyFolder pathFile & "\MenuUser\Programs" , pathUser & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"

Set objFile = fso.GetFile(path & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Desktop.ini")
objFile.Attributes = 38
Avatar du membre
ml56
Messages : 444
Enregistré le : dim. 17 mai 2009 19:53
Etes vous un robot ? : Non
Localisation : Bretagne

Re: Personnalisation du menu Démarrer

Message par ml56 »

Bonjour,

Comme pour un autre topic de ce forum, la solution passe sans doute par l'attribut "Lecture seule" des dossiers Démarrage (ou plutôt Startup) et Accessoires (ou plutôt Accesories) concernés (dans ProgramData... et AppData...).

Bref, il faut te placer dans le dossier où sont ces dossiers Startup et Accessories, ouvrir une invite de commandes en mode admin et taper ces lignes :

attrib +R "Startup"

Le dossier Startup devrait se renommer automatiquement Démarrage, puis :

attrib +R "Accessories"

Le dossier Accessories se renommera Accessoires.

En gros, les dossiers contenant des fichiers desktop.ini qui permettent la francisation de leur nom doivent être en "lecture seule" (le dossier, pas uniquement les fichiers qu'ils contiennent). La commande attrib +R "Nom du dossier" permet de redonner cet attribut.

A+
amstramgram
Messages : 5
Enregistré le : jeu. 26 août 2010 15:54
Etes vous un robot ? : Non

Re: Personnalisation du menu Démarrer

Message par amstramgram »

Bonjour et merci ml56 pour ta réponse...

Le fait est que j'avais lu auparavant plusieurs post qui faisaient référence à la solution que tu avances. Néanmoins, en gros balourd que je suis, je m'étais persuadé que cela ne pouvait être aussi simple. Je m'étais en effet assuré par ailleurs, via un petit tour dans l'onglet propriété des dossiers incriminés, qu'ils étaient bel et bien en "Lecture seule". Il apparait cependant que cela n'a rien à voir avec l'attribut "Read-Only".

Grâce à toi, voilà mon problème du jour résolu.

Pour ceux que cela intéresse, voici le code vbs opérationnel pour réaliser l'opération :

Code : Tout sélectionner

Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

'Récupération du chemin du script vbs en cours
pathFile =  left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))

'Récupération du chemin du menu démarrer "tous les utilisateurs"
pathAllUsers = WshShell.SpecialFolders("AllUsersStartMenu")

'Suppression des raccourcis "Programmes par défaut" et "Windows Update"
if fso.FileExists(pathAllUsers + "\Windows Update.lnk") Then fso.DeleteFile pathAllUsers + "\Windows Update.lnk"
if fso.FileExists(pathAllUsers + "\Default Programs.lnk")Then fso.DeleteFile pathAllUsers + "\Default Programs.lnk"

'Récupération du chemin des programmes du menu démarrer "tous les utilisateurs"
pathAllUsers = WshShell.SpecialFolders("AllUsersStartMenu") + "\Programs"

'Récupération du chemin des programmes du menu démarrer de l'utilisateur
pathUser = WshShell.ExpandEnvironmentStrings("%UserProfile%") & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"

'Suppression du dossier "Programmes" du menu Démarrer "Tous les utilisateur"
if fso.FolderExists(pathAllUsers) Then fso.DeleteFolder pathAllUsers, True

'Copie du dossier "Programmes" personnalisé pour "Tous les Utilisateur"
fso.CopyFolder pathFile & "\MenuAll\Programs" , pathAllUsers

'Appel de la procédure "ReadOnlyFolder" sur le dossier Programmes du menu Démarrer "Tous les utilisateurs"
ReadOnlyFolder fso.GetFolder(pathAllUsers)

'Suppression du contenu du dossier "Programmes" du menu Démarrer de l'utilisateur
if fso.FolderExists(pathUser) Then fso.DeleteFolder pathUser, True

'Copie du dossier "Programmes" personnalisé pour l'utilisateur
fso.CopyFolder pathFile & "\MenuUser\Programs" , pathUser

'Appel de la procédure "ReadOnlyFolder" sur le dossier Programmes du menu Démarrer de l'utilisateur
ReadOnlyFolder fso.GetFolder(pathUser)

Sub ReadOnlyFolder(Folder)
	'Attribut "Read-Only" pour le dossier traité
	Folder.Attributes = 1
	'Les fichiers "Desktop.ini" prennent les attributs "HSA"
	Set files = Folder.Files
	For Each file In files
		if (file.name = "Desktop.ini" or file.name = "desktop.ini") then file.Attributes = 38
	Next
	'On applique le même traitements aux sous-dossiers
	For Each Subfolder in Folder.SubFolders
        	ReadOnlyFolder Subfolder
	Next
End Sub
Kenavo.

Laurent.

PS: Je débute ici et je ne sais comment marquer le sujet comme "RESOLU"...
Répondre