Comment retrouver le programme associé avec l'extension d'un fichier [Résolu]

Signaler
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Bonjour,



J'aimerais savoir comment retrouver le chemin de l'éxecutable associés avec une extension.



J'aimerais une fonction du style GetAssocExe(".txt",exename);, mais je ne sais pas si ça existe.

5 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
la valeur par defaut te donne le nom de la cle a consulter en generale [extention]file
donc ici txtfile, ensuite, tu va dans shell/open/command.
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

tu peux regarder dans la base de registre.
RegOpenKey.
RegQueryValue.

@++
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Oui je veux bien mais dans les clés HKEY_CLASSES_ROOT, il y a l'extension avec le type de contenu. il y a bien un OpenWithList mais dedans il pas de chemin complet vers l'exe
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Merci de ton aide.
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Pour ceux à qui cela intéresse voici mon code :



#include <stdarg.h>

#include <windef.h>

#include <winbase.h>

#include <Winreg.h>

#include <stdlib.h>



// Fonction qui remplace un occurence dans une chaîne de caractères

char* Replace(const char * fullstring,const char * replace,const char * replaceby){

char * retfull;

unsigned int len[3]={strlen(fullstring),strlen(replace),strlen(replaceby)},j;

for(int i=0;i<=len[0];++i){

j=0;

while(fullstring[i+j]==replace[j]){

++j;

}

if(j==len[1]){

char temp1[i];

temp1[i]=0;

memcpy(temp1,fullstring,i);




char temp2[len[0]-i-j];

for(int k=i+j;k<=len[0];++k){

temp2[k-i-j]=fullstring[k];

}

temp2[len[0]-i-j]=0;



retfull = new char[strlen(temp1)+strlen(temp2)+len[2]+1];

strcpy(retfull,temp1);

strcat(retfull,replaceby);

strcat(retfull,temp2);

}

}

return retfull;

}



char* ReadString(HKEY HK, const char * key, const char * name){

char * valeur;

HKEY Retour;

RegOpenKeyEx(HKEY_CLASSES_ROOT,key,0,KEY_ALL_ACCESS,&Retour);



unsigned long type,taille=0;

while(ERROR_MORE_DATA == RegQueryValueEx(Retour,name,NULL,&type,(unsigned char *)valeur,&taille)){

++taille;

valeur = new char[taille];

}



RegCloseKey(Retour);



if(taille==0) return NULL;

return valeur;

}



char* GetAssocExe(const char * ext){

char * appname;

appname = ReadString(HKEY_CLASSES_ROOT,ext,"");



if(appname==NULL) return NULL;



unsigned int len=strlen(appname)+22;

char key[len];

memset(key,0,len);



strcat(key,appname);

strcat(key,"\\shell\\open\\command");



return ReadString(HKEY_CLASSES_ROOT,key,"");;

}



// Ouvre un fichier avec le programme qui est associé avec l'extension ext

bool OpenLike(const char * ext,const char * filename){

char * exename;

exename = GetAssocExe(ext);



if(exename==NULL) return 0;

system(Replace(exename,"%1",filename));



return 1;

}