Asociar extensiones de archivo a nuestras aplicaciones en Compact Framework

 
En Windows Mobile al igual que en Windows podemos asociar una extensión de archivo para que se ejecute una aplicación determinada. Podemos asociar los archivos con una extensión (por ejemplo .rxr) para que sean abiertos con una aplicación desarrollada por nosotros.
 
En Windows Mobile esto lo podemos hacer modificando el registro.
 

 
Las claves a generar se encuentran dentro de HKEY_CLASSES_ROOT. Para poder ver el registro de nuestro dispositivo (también podemos hacerlo sobre un emulador) utilizaremos el Editor de registro remoto que podemos encontrar en Visual Studio Remote Tools, más adelante veremos como hacerlo directamente desde código.
 
Lo primero será crear una clave con el nombre de nuestra extensión (por ejemplo .rxr) en el valor por defecto especificamos la asociación (por ejemplo rxrfile) dentro de HKEY_CLASSES_ROOT.
 
Después crearemos otra clave en HKEY_CLASSES_ROOT con el nombre de la asociación (rxtfile), dentro de esta creemos la estructura de claves OpenCommand nos quedará una ruta como la que sigue, HKEY_CLASSES_ROOTrxrfileOpenCommand. Ahora modificaremos el valor por defecto (Default) de Command por la ruta al ejecutable (en nuestro ejemplo nuestra propia aplicación) y lo haremos de modo que pueda recoger un parámetro (esto lo hacemos agregando %1), este parámetro se inicializara con la ruta del archivo que se esté ejecutando.
 
La cadena quedará como sigue: (Comillas incluidas)
 
«Program FilesMi_aplicación.exe» «%1»
 

Por otro lado ya que nos ponemos a asociar el archivo queda muy elegante asociar el icono de nuestra aplicación a la extensión asociada, para ello podemos agregar la clave HKEY_CLASSES_ROOTrxrfileDefaultIcon y establecer el valor con la ruta del ejecutable y agregar, 0 al final.

 

Aquí os dejo un ejemplo de como podemos hacer todo esto.
 

 

/// <summary>
/// Asociar una extensi¢n de archivo a una aplicación
/// </summary>
/// <param name=»extension»>Extensión a asociar</param>
/// <param name=»aplicacion»>Aplicación a ejecutar</param>
private void AsociarArchivo(string extension, string aplicacion)
{
  //Creamos la key en HKEY_CLASSES_ROOT
  RegistryKey key1declaracion = Registry.ClassesRoot.CreateSubKey(«.» + extension);

  key1declaracion.SetValue(«Default», extension + «file»);

  //Creamos las siguientes claves en
 
//HKEY_CLASSES_ROOTxxxfileShellOpenCommand
RegistryKey key2asociacion = Registry.ClassesRoot.CreateSubKey(@»» + extension + «file» + @»ShellOpenCommand»);

// Establecemos el valor por defecto a la ruta al ejecutable a asociar,
// %1 ser  el parametro con el que se iniciar  la aplicación y
// equivaldr  al path del archivo.
key2asociacion.SetValue(«Default»,@»»»» + aplicacion + @»»» «»%1″»»);

//Asociamos el icono de nuestro ejecutable a la extensi¢n asociada
RegistryKey key3Icono = Registry.ClassesRoot.CreateSubKey(@»» + extension + «file» + @»DefaultIcon»);
key3Icono.SetValue(«Default», @»»»» + aplicacion + @»»»» + «0»);
}

 

 

Podéis encontrar una solución con el código fuente completo para Visual Studio 2008 (SDK WM5) en el siguiente enlace: Asociar extensiones en WM

Un saludo a todos

José Antonio Gallego

Mobile .NET Users Group