ExtensionAssociate
[Asociador de extensiones propietarias]

Fecha: 04/Dic/2004 (04/12/04)
Autor: Unai Zorrilla Castro
Escríbeme

 


A la hora de diseñar una aplicación, es posible que necesitemos definir un tipo de archivos con un formato específico, esto no es problema siempre que no queramos asociar estos archivos únicamente con nuestra aplicación ( por ejemplo archivos Text/Plain ( .txt ) u otros ) . El trabajo, aunque no mucho surge cuando queremos que estas extensiones de archivos se asocien a una aplicación determinada ( bien sea nuestra o de terceros). El fundamento del sistema de extensiones de archivos en Windows es relativamente fácil, únicamente requiere de la manipulación del registro ( regedit.exe ) del S.O.

ExtensionAssociate es una clase que facilita este trabajo, además de permitir el registro de extensiones, permite que al hacer click en un determinado tipo de archivo este se abra con la aplicación que nosotros querrramos. Tambien permite añadir entradas al menú contextual del sistema de ficheros. Antes de mostrar algunos ejemplos de su funcionamiento vamos a explicar un poco el funcionamiento del registro, para comprender como se realizó la clase ExtensionAssociate.

En los comienzos de los desarrollos de S.O, las extensiones de archivos estaban asociadas al propio sistema operativo, lo que impedía la creación de nuevas extensiones y la dificultad en el manejo de los mismos. Con el tiempo se entendió que la mejor manera para tratar las extensiones de archivos no era asociarlos al sistema operativo sino a las aplicaciones, de tal forma que eran estas las que los creaban y los manejaban, facilitando así la proliferación de los mismos.

En la actualidad, en Windows, la lista de extensiones que el sistema operativo entiende como ' manejadas ' están almacenadas en el registro del sistema, dentro del nodo HKEY_CLASS_ROOT, como puede verse en la Figura 1 .El valor de la clave asociada a la extensión contiene la clave de registro del programa que la maneja, como puede verse en la Figura 2 , en mi caso tengo asociados los archivos .txt a la aplicación UltraEdit32 la cual posee una entrada de registro UltraEdit.txt en HKEY_CLASS_ROOT.

Figura 2

Figura 1

Pues bien, llegado a este punto ya sabemos que para registrar una extensión, lo único que tenemos que hacer es crear una entrada de registro en HKEY_CLASS_ROOT con el nombre de la extensión ( por ejemplo .unai ), a esta clave únicamente tenemos que asociarle el nombre de la clave del programa que la maneja ( CryptoAssoc en este ejemplo ), la estructura de esta nueva clave es sencilla ( ver Figura 3 ). En principio basta con dos subclaves, shell y DefaultIcon. La subclave DefaultIcon tendrá como valor asociado la ruta al icono que deseemos para los archivos. Dentro de la subclave shell tendremos varias posibles subclaves como open, print, printto .... La subclave open contendrá la ruta del programa que deseemos que abra este tipo de archivos, la subclave print los mismo pero para el manejador de la impresión. También se pueden crear subclaves personalizadas las cuales contendrán nuevas opciones disponibles en el menú contextual del sistema de ficheros para esta extensión, en el caso de ejemplo se tiene la subclave Abrir_Archivos_.unai lo que me proporcionara como se ha dicho que al hacer click con el botón derecho en un archivo .unai se muestre lo siguiente ( ver Figura 4 ).

 

Ya sabemos por lo tanto como haríamos para crear y asociar las extensiones de una forma ' manual '. Con el fin de ahorrar y reutilizar código ExtensionAssociate proporciona esta funcionalidad a través del método Associate() usando el namespace Microsoft.Win32 el cuál nos permite trabajar contra el registro de Windows, lo que sin duda nos ahorrará un poco de trabajo.

 Junto con el código ExtensionAssociate se dispone de un ejemplo de registro de extensiones, este ejemplo CryptoAssoc es una aplicación sencillita, su única función es guardar texto encriptado ( DES ) en archivos .unai. Una vez registrada la extensión al hacer click en los archivos .unai la aplicación arrancará, desencriptando el archivo y mostrando en pantalla en texto.

 


ir al índice

Fichero con el código de ejemplo: unai_ExtAssociate.zip - 37 KB

Fichero con el código de ejemplo: unai_ExtAssociatetest.zip - 48 KB