cpp
#define ShlObjHPP #include <vcl.h> #pragma hdrstop #include <shlobj.h> #include <Registry.hpp> void UnRegisterFileType(AnsiString Ext, AnsiString PathExec, BOOL Full) { // Ext tipo de archivo : EXTENSION // PathExec: RUTA COMPLETA del ejecutable que queremos asociar TRegistry *Registry = new TRegistry; try{ Registry->RootKey = HKEY_CLASSES_ROOT; // Borrar la clave .Ext if(Full) Registry->DeleteKey("." + Ext); else if(Registry->OpenKey("." + Ext, false)){ // Valor con el nombre del tipo de archivo para esta clave (extfile) Registry->DeleteValue(""); Registry->CloseKey(); } // Borrar la clave del nombre del tipo de archivo dado antes (extfile) if(Registry->KeyExists(Ext + "file")){ if(Full) Registry->DeleteKey(Ext + "file"); else{ // Crear una nueva clave para el icono por defecto if(Registry->OpenKey(Ext + "file\\DefaultIcon", true)){ // Crear un valor con el icono (PathExec.exe,0) if(Registry->ReadString("").Pos(PathExec)) Registry->DeleteValue(""); Registry->CloseKey(); } if(Registry->OpenKey(Ext + "file\\shell\\open\\command", true)){ //Crear el valor para el ejecutable que abre el tipo de archivo (PathExec.exe "%1") if(Registry->ReadString("").Pos(PathExec)) Registry->DeleteValue(""); Registry->CloseKey(); } } } } __finally{ delete Registry; } // Notificar al sistema el cambio efectuado SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0); }
El parámetro bool Full sirve para eliminar por completo las claves creadas para el tipo de archivo con la función RegisterFileType. Si se le da el valor true lo hará, si es false, sólo eliminará los valores referentes a la aplicación que lo abre y de su icono.
Que le saquéis partido
Saludos.