Page 1 sur 1

association fichiers Windows VISTA

Publié : mer. 02/janv./2008 21:13
par Atomo
Salut à tous, j'aimerai savoir comment associer un fichier avec un programme sous windows vista.
Sur XP j'utilise la fonction associatefiletoEX() mais apparement ca ne marche pas sur vista.

Merci de bien vouloir m'éclairer.

Publié : jeu. 03/janv./2008 9:37
par Atomo

Code : Tout sélectionner

Procedure AssociateFileEx(ext$,ext_description$,programm$,Icon$,prgkey$,cmd_description$,cmd_key$) 
     cmd$=Chr(34)+programm$+Chr(34)+" "+Chr(34)+"%1"+Chr(34) 
     If GetVersion_() & $FF0000  ; Windows NT/XP 
       SetKey(#HKEY_CLASSES_ROOT, "Applications\"+prgkey$+"\shell\"+cmd_description$+"\command","",#REG_SZ    ,@cmd$,Len(cmd$)+1) 
       If ext_description$ 
         Key$=ext$+"_auto_file" 
         SetKey(#HKEY_CLASSES_ROOT  ,"."+ext$           ,"",#REG_SZ,@Key$,Len(Key$)+1) 
         SetKey(#HKEY_CLASSES_ROOT  ,Key$               ,"",#REG_SZ,@ext_description$,Len(ext_description$)+1) 
         If Icon$ 
           SetKey(#HKEY_CLASSES_ROOT,Key$+"\DefaultIcon","",#REG_SZ,@Icon$,Len(Icon$)+1) 
         EndIf 
       EndIf 
       SetKey(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\."+ext$,"Application",#REG_SZ,@prgkey$         ,Len(prgkey$)+1) 
     Else ;Windows 9x 
       SetKey(#HKEY_LOCAL_MACHINE,"Software\Classes\."+ext$                        ,"",#REG_SZ,@prgkey$         ,Len(prgkey$)+1) 
       If ext_description$ 
        SetKey(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$                   ,"",#REG_SZ,@ext_description$,Len(ext_description$)+1) 
       EndIf 
       If Icon$ 
        SetKey(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$+"\DefaultIcon"    ,"",#REG_SZ,@Icon$           ,Len(Icon$)+1) 
       EndIf 
       If cmd_description$<>cmd_key$ 
         SetKey(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$+"\shell\"+cmd_key$,"",#REG_SZ,@cmd_description$,Len(cmd_description$)+1) 
       EndIf 
      SetKey(#HKEY_LOCAL_MACHINE,"Software\Classes\"+prgkey$+"\shell\"+cmd_key$+"\command","",#REG_SZ,@cmd$   ,Len(cmd$)+1) 
     EndIf 
   EndProcedure
   
   Procedure AssociateFile(ext$,ext_description$,programm$,Icon$) 
     AssociateFileEx(ext$,ext_description$,programm$,Icon$,GetFilePart(programm$),"open","open")  
   EndProcedure 

Si je me fie à la ligne 3 du code, c'est compatible uniquement XP et NT.

Publié : jeu. 03/janv./2008 13:22
par Progi1984
Selon MSDN, AssociateFileEx existerait bien dans Vista : http://msdn2.microsoft.com/en-us/library/bb432512.aspx

Publié : jeu. 03/janv./2008 14:20
par gnozal
Atomo a écrit :Si je me fie à la ligne 3 du code, c'est compatible uniquement XP et NT.
Cette ligne ne fait que repérer la version de Windows, et çà devrait être correct pour Vista (à vérifier).
Progi1984 a écrit :Selon MSDN, AssociateFileEx existerait bien dans Vista : http://msdn2.microsoft.com/en-us/library/bb432512.aspx
Oui, mais à mon humble avis çà n'a rien à voir avec le code ci-dessus (Droopy lib ?) où AssociateFileEx() est une procédure purebasic utilisant des fonctions API de manipulation de la base de registres.
Le problème avec Vista (que je n'utilise pas) ne viendrait-il pas d'un problème de droits ?
Ou alors il faut utiliser #HKEY_CURRENT_USER au lieu de #HKEY_CLASSES_ROOT ?

Publié : jeu. 03/janv./2008 15:27
par Atomo
pour la ligne 3 il repere bien windows vista je viens de tester, mais ca ne marche toujours pas en remplacant par #HKEY_CURRENT_USER.

sinon j'ai trouvé ce post de FREAK qui parle du registre et vista :

http://www.purebasic.fr/english/viewtop ... 27901413ab

je ne sais pas trop comment appliquer son code, merci de bien vouloir m'aider :?

Publié : jeu. 03/janv./2008 15:46
par gnozal
Atomo a écrit :sinon j'ai trouvé ce post de FREAK qui parle du registre et vista : http://www.purebasic.fr/english/viewtop ... 27901413ab
C'est bien un problème de droits selon Freak, et il utilise #HKEY_CURRENT_USER.
Remplacer #HKEY_CLASSES_ROOT par #HKEY_CURRENT_USER dans ton code ne suffit pas, la clé est aussi différente ("Software\CLASSES").
Tu dois donc tester si ton OS est Vista et utiliser un code adapté.
Essaie le code ci-dessous (très aproximatif, non testé, je n'ai pas Vista ... ni la Droopy lib ... ni PB sur ce PC!) :

Code : Tout sélectionner

SetKey(#HKEY_CURRENT_USER,"Software\Classes\."+ext$,"",#REG_SZ,@prgkey$,Len(prgkey$)+1) 
If ext_description$ 
  SetKey(#HKEY_CURRENT_USER,"Software\Classes"+prgkey$,"",#REG_SZ,@ext_description$,Len(ext_description$)+1) 
EndIf 
If Icon$ 
  SetKey(#HKEY_CURRENT_USER,"Software\Classes"+prgkey$+"\DefaultIcon","",#REG_SZ,@Icon$,Len(Icon$)+1) 
EndIf 
If cmd_description$<>cmd_key$ 
  SetKey(#HKEY_CURRENT_USER,"Software\Classes"+prgkey$+"\shell"+cmd_key$,"",#REG_SZ,@cmd_description$,Len(cmd_description$)+1) 
EndIf 
SetKey(#HKEY_CURRENT_USER,"Software\Classes"+prgkey$+"\shell"+cmd_key$+"\command","",#REG_SZ,@cmd$,Len(cmd$)+1) 

Publié : jeu. 03/janv./2008 15:50
par Atomo
merci pour ta réponse je vais tester.
Esque je dois cocher dans le compilateur l'option "request administrateur for vista" ou "request user for vista" ou bien ne rien cocher ?

Publié : jeu. 03/janv./2008 15:58
par gnozal
Si çà ne fonctionne pas, reprends simplement le code de Freak en remplaçant 'Purebasic.exe' par ton application et '.pb' par ton extension.
Je pense que ne rien cocher est suffisant, mais là encore, je n'ai pas Vista ...

Publié : jeu. 03/janv./2008 17:27
par Atomo
merci beaucoup pour ton aide ca marche à merveille !