Page 1 sur 2
[R] Changer les paramètres d'un type de fichier
Posté : ven. 23 mai 2008 14:27
par tolf
Bonjour,
Je voudrais faire un script qui change les paramètres d'un type de fichier (par ex .abc) :
- je voudrais changer la description du fichier (par ex un fichier .au3 a pour description "AutoIt v3 Script")
- je voudrais changer l'icône associée au fichier (j'ai un fichier .ico correspondant à la nouvelle icône)
- je voudrais changer le programme utilisé par défaut quand je double clique sur mon fichier : pour cela, je dispose d'un programme au3 et je voudrais que quand je double clique sur mon fichier, cela lance mon programme et que ça "simule" (je ne sais pas comment on peut appeler ça) "Fichier>ouvrir" dans mon programme en sélectionnant le bon fichier (comme le fait par ex SciTE quand je double clique un fichier au3 : lancement de SciTE et ouverture du fichier par SciTE)
Est-il possible de faire tout cela (ou au moins une partie) ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : dim. 25 mai 2008 17:48
par Tlem
Ayant cherché à faire la même chose que vous pour une de mes applications, voici ce que j'avais trouvé :
Il faut utiliser la commande ftype pour faire l'association des fichiers.
Voici un fonction que j'avais fait pour l'occasion :
Code : Tout sélectionner
Func _FiletypeAssociation($extension, $type, $program, $description = '')
; e.g. _FiletypeAssociation('.pdf', 'FoxitReader.Document', '"%ProgramFiles%\FoxitReader.exe" "%1"')
$exitcode = RunWait(@ComSpec & ' /c ftype ' & $type & '=' & $program & _
' && assoc ' & $extension & '=' & $type, '', @SW_HIDE)
If $description And Not $exitcode Then
Return RegWrite('HKCR' & $type, '', 'Reg_sz', $description)
EndIf
Return Not $exitcode
EndFunc ;==>_FiletypeAssociation
Pour l'icône, j'avais fait ceci :
Code : Tout sélectionner
RegWrite("HKLM\SOFTWARE\Classes\NomDeMonProgramme\DefaultIcon", "", "REG_SZ", @ScriptDir & "\MonProgramme.exe,0")
Re: [..] Changer les paramètres d'un type de fichier
Posté : lun. 26 mai 2008 18:04
par tolf
Merci pour les informations, mais je n'ai pas réussi à changer la description (j'ai toujours "Fichier ABC") et l'icône n'est pas changée : il y a sans doute un problème de syntaxe que j'ai mal comprise ^^
En plus, apparemment
Code : Tout sélectionner
RegWrite("HKLM\SOFTWARE\Classes\NomDeMonProgramme\DefaultIcon", "", "REG_SZ", @ScriptDir & "\MonProgramme.exe,0")
change l'icône du programme : est-il possible de ne changer que l'icône du fichier (car le programme ouvre plusieurs types de fichiers et je voudrais mettre une icône différente pour chaque fichier) ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : lun. 26 mai 2008 21:03
par Tlem
Pour l'utilisation de
_FiletypeAssociation si vous suivez l'exemple il n'y aura pas de problème.
Pour l'icône et la description, voici par exemple l'endroit ou ca se trouve pour AutoIt :
Code : Tout sélectionner
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\AutoIt3Script] <= Description.
@="Script AutoIt v3"
[HKEY_CLASSES_ROOT\AutoIt3Script\DefaultIcon] <= Icône par défaut.
@="C:\\Program Files\\AutoIt3\\Icons\\filetype1.ico"
Pensez à re-démarrer votre ordinateur pour prendre en compte les modifications, ou tout simplement tuez la tache
Explorer et re-créé là !!!
Re: [..] Changer les paramètres d'un type de fichier
Posté : jeu. 05 juin 2008 19:13
par tolf
Bonsoir,
J'ai essayé mais ça ne marche toujours pas.
J'ai fait des tests en utilisant SciTE comme programme ouvrant le fichier et j'ai fait cela :
Code : Tout sélectionner
_FiletypeAssociation(".abc", "Mon fichier Abc", '"%ProgramFiles%\AutoIt3\SciTE\SciTE.exe" "%1"', "Mon fichier Abc")
_ChangeIcone("SciTE", @ScriptDir & "..\mon_icone.ico")
Func _FiletypeAssociation($extension, $type, $program, $description = '')
; e.g. _FiletypeAssociation('.pdf', 'FoxitReader.Document', '"%ProgramFiles%\FoxitReader.exe" "%1"')
$exitcode = RunWait(@ComSpec & ' /c ftype ' & $type & '=' & $program & ' && assoc ' & $extension & '=' & $type, '', @SW_HIDE)
If $description And Not $exitcode Then
Return RegWrite('HKCR' & $type, '', 'Reg_sz', $description)
EndIf
Return Not $exitcode
EndFunc ;==>_FiletypeAssociation
Func _ChangeIcone($program_name, $icon)
RegWrite("HKCR\SOFTWARE\Classes\" & $program_name & "\DefaultIcon", "REG_SZ", $icon & ",0")
EndFunc
Re: [..] Changer les paramètres d'un type de fichier
Posté : jeu. 05 juin 2008 23:09
par Tlem
Il y a quelques erreurs dans le code, c'est pour ça que ça ne fonctionne pas.
Je viens de fignoler la fonction
_FileTypeAssociation j'espère que ça vous conviendra.

Re: [..] Changer les paramètres d'un type de fichier
Posté : ven. 06 juin 2008 19:02
par tolf
J'ai testé et apparemment, il y a un problème pour les RegWrite : j'ai @error = 2
Re: [..] Changer les paramètres d'un type de fichier
Posté : ven. 06 juin 2008 21:37
par Tlem
Code : Tout sélectionner
; Return 2 on association deletion if file extension is not exist
Veut dire que lors de la suppression d'une association que celle-ci n'existe pas ...
Autrement dit, vous essayez de supprimer une association non existante.
Re: [..] Changer les paramètres d'un type de fichier
Posté : dim. 08 juin 2008 15:46
par tolf
Non, le code d'erreur dont je parlais est celui retourné non pas par la fonction
_FileTypeAssociation, mais par
RegWrite :
et
Code : Tout sélectionner
RegWrite('HKCR' & $DocumentType & '\DefaultIcon', '', 'REG_SZ', $IconFile & ',' & $IconIndex)
Re: [..] Changer les paramètres d'un type de fichier
Posté : dim. 08 juin 2008 18:45
par Tlem
Quel OS avez-vous ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : dim. 08 juin 2008 19:47
par tolf
Je suis sous XP
Re: [..] Changer les paramètres d'un type de fichier
Posté : dim. 08 juin 2008 21:19
par Tlem
Hummmm effectivement, il y avais une erreur dans l'affichage du code.
L'outil de coloration syntaxique GeSHi est visiblement bugué et n'apprécie pas l'antislash dans les simples quotes !!!
J'ai adapté le code et il est affiché correctement maintenant.
Désolé.

Re: [..] Changer les paramètres d'un type de fichier
Posté : lun. 09 juin 2008 10:11
par tolf
Merci, ça marche enfin

!
J'ai juste une petite remarque à faire : quand je veux supprimer l'association, l'icône et la description sont supprimées, mais pas le logiciel d'ouverture par défaut. Est-il possible de corriger ça ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : lun. 09 juin 2008 14:48
par Tlem
Je n'ai pas ce problème sur mon PC !!!
J'ai tester avec l'exemple 1 :
Code : Tout sélectionner
_FiletypeAssociation(".abc", "abc.Document", "%ProgramFiles%\AutoIt3\SciTE\SciTE.exe")
avec un fichier Test1.abc sur le bureau, et l'association se passe sans problème.
Ensuite avec :
l'association est bien supprimée, et si je fait deux cliques de souris sur le fichier Test1.abc, il me demande avec quel logiciel il doit l'ouvrir !!!
Peut être que chez vous, vous devez re-démarrer l'ordinateur.
Re: [..] Changer les paramètres d'un type de fichier
Posté : mar. 10 juin 2008 19:02
par tolf
En fait, j'avais dans mes tests utilisé une extention pour laquelle j'avais déjà spécifié un programme d'ouverture (en passant par le menu Outils > Options des dossiers > Types de fichiers de l'explorateur windows) et du coup, en supprimant l'association, j'étais revenu au premier programme par défaut.
Par contre, avec une nouvelle extension, ça marche... mais quand je double-clique, le programme d'ouverture reste dans les programmes recommandés.
Excusez ma précision des petits détails, mais est-il possible de tout effacer ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : mer. 11 juin 2008 00:01
par Tlem
Le code est modifié pour supprimer totalement une extension même crée avec l'explorer.
J'en ai même profité pour améliorer une petite chose : c'est de pouvoir utiliser l'extension au format
.ext ou plus simplement
ext et donc de se passer de l'utilisation du point.

Re: [..] Changer les paramètres d'un type de fichier
Posté : mer. 11 juin 2008 14:46
par tolf
J'ai essayé de supprimer une extension avec la nouvelle fonction et toutes mes extensions ont été supprimés !
Comment faire pour réparer ça (même les .exe .lnk ne souvrent pas) ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : mer. 11 juin 2008 15:42
par Tlem
C'est effectivement pas très cool. Il m'était arrivé la même chose hier, par ce que je n'avais pas fait attention et
$Extension était vide ou ne contenait que le point donc il à tout virer.
La seule solution c'est de restaurer la base de registre, ou tout simplement de récupérer cette clé de registre d'une autre session puis manuellement en ligne de commande de restaurer :
"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" avec regedit.
J'avais fait Démarrer / Excécuter / CMD.exe.
Puis quand il m'a demander avec quoi ouvrir, j'ai été dans c:\Windows\System32 et j'ai cliqué sur cmd.exe.
Après en ligne de commande il suffit d'utiliser Regedit et le fichier .reg de l'export de la clé.
Je vais rajouter de ce pas dans le code une fonction qui vérifie que
$Extension ne soit pas vide ou égal à ".".
J'espère que vous y arriverez sans trop de problème.
Re: [..] Changer les paramètres d'un type de fichier
Posté : mer. 11 juin 2008 15:44
par tolf
Et comment on récupère d'une autre session plus exactement ?
Re: [..] Changer les paramètres d'un type de fichier
Posté : mer. 11 juin 2008 16:26
par Tlem
Heuuu c'est pire que ce que je croyais, car c'est une partie de la HKCR qui est supprimée !!!
Je viens juste de refaire l'expérience.
Par contre heureusement pour moi j'utilise un outil pour sauvegarder ma base de registre, et j'ai donc pu la restaurer rapidement.
Je viens de supprimé le code temporairement, le temps de voir ce qu'il en est.
En attendent, essayez de restaurer votre base de registre avec ceci :
http://www.hsf.tuxolem.com/Restaurer_la ... re_XP.html
ou en lançant en mode console (comme expliqué précédement) :
C:\Windows\system32\restore\rstrui.exe