escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 02 Jul, 2008 8:21 pm Asunto: Registrar un tipo de archivo para nuestra aplicación. |
|
|
Con el explorador es fácil registrar un tipo de archivo para que lo abra una determinada aplicación, así como asignarle un icono por defecto. Pero hacerlo desde código, es un poco mas complicado.
Tenemos 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.
Aquí está el código necesario:
| Código: |
#include <Registry>
#include <shlobj>
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 antes (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);
}
|
Saludos. |
|