Si quieres registrar un tipo de archivo para abrir con una determinada aplicación, tienes que abrir el registro de Windows y crear en HKEY_CLASSES_ROOT la clave correspondiente a ese archivo (.ext) y luego escribir otra clave con el tipo de archivo para definir el programa que la abre y su icono.
Abre el registro y cotillea los tipos de archivo y cómo se definen.
Bueno, aquí tienes el código:
Código:
#include <Registry.hpp>
#include <shlobj.h>
void
RegisterFileType(AnsiString Ext, AnsiString PathExec)
{
// Ext tipo de archivo : EXTENSION
// PathExec: RUTA COMPLETA del ejecutable que queremos que lo abra
TRegistry *Registry = new TRegistry;
try{
Registry->RootKey = HKEY_CLASSES_ROOT;
// Crear la clave .Ext
Registry->OpenKey("." + Ext, true);
try{
// Ccrear el valor con el nombre del tipo de archivo para esta clave (extfile)
Registry->WriteString("", Ext + "file");
}
__finally{
Registry->CloseKey();
}
// Crear una clave nueva para el nombre del tipo de archivo dado anteriormente (extfile)
Registry->CreateKey(Ext + "file");
// Crear una nueva clave para el icono por defecto
Registry->OpenKey(Ext + "file\\DefaultIcon", true);
// Crear un valor con el icono (PathExec.exe,0)
try{
Registry->WriteString("", PathExec + ",0");
}
__finally{
Registry->CloseKey();
}
Registry->OpenKey(Ext + "file\\shell\\open\\command", true);
//Crear el valor para el ejecutable que abre el tipo de archivo (PathExec.exe "%1")
try{
Registry->WriteString("", PathExec + " \"%1\"");
}
__finally{
Registry->CloseKey();
}
}
__finally{
delete Registry;
}
// Notificar al sistema el cambio efectuado
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
}
Pruebalo y nos cuentas.
Saludos.