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. :roll:

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 :

Code : Tout sélectionner

RegWrite('HKCR' & $DocumentType, '', 'Reg_sz', $Description)
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é. :roll:

Re: [..] Changer les paramètres d'un type de fichier

Posté : lun. 09 juin 2008 10:11
par tolf
Merci, ça marche enfin :wink: !

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 :

Code : Tout sélectionner

_FiletypeAssociation(".abc")
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. 8)

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