Alcantornet
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
13 sept. 2005 à 15:09
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;
}