[R] Changer les paramètres d'un type de fichier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

[R] Changer les paramètres d'un type de fichier

#1

Message 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) ?
Modifié en dernier par tolf le mer. 11 juin 2008 19:57, modifié 3 fois.
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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")
 
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#3

Message 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) ?
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message 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à !!!
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#5

Message 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
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#6

Message 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:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#7

Message par tolf »

J'ai testé et apparemment, il y a un problème pour les RegWrite : j'ai @error = 2
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#8

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#9

Message 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)
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#10

Message par Tlem »

Quel OS avez-vous ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#11

Message par tolf »

Je suis sous XP
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#12

Message 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:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#13

Message 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 ?
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#14

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#15

Message 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 ?
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#16

Message 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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#17

Message 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) ?
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#18

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#19

Message par tolf »

Et comment on récupère d'une autre session plus exactement ?
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#20

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre