association fichiers Windows VISTA

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

association fichiers Windows VISTA

Message 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.
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Message 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.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Selon MSDN, AssociateFileEx existerait bien dans Vista : http://msdn2.microsoft.com/en-us/library/bb432512.aspx
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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 ?
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Message 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 :?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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) 
Dernière modification par gnozal le jeu. 03/janv./2008 15:55, modifié 2 fois.
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Message 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 ?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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 ...
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Message par Atomo »

merci beaucoup pour ton aide ca marche à merveille !
Répondre