2008-08-24 13 views
14

Cómo determinar las aplicaciones asociadas a una extensión en particular (por ejemplo, .JPG) y luego determinar dónde se encuentra el ejecutable de esa aplicación para que pueda iniciarse mediante una llamada para decir System.Diagnostics.Process.Start (...).Windows: aplicaciones de lista y lanzamiento asociadas con una extensión

Ya sé leer y escribir en el registro. Es el diseño del registro lo que hace más difícil determinar de manera estándar qué aplicaciones están asociadas con una extensión, qué nombres se muestran y dónde se encuentran sus ejecutables.

Respuesta

8

ejemplo de código:

using System; 
using Microsoft.Win32; 

namespace GetAssociatedApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}"; 
      const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command"; 

      // 1. Find out document type name for .jpeg files 
      const string ext = ".jpeg"; 

      var extPath = string.Format(extPathTemplate, ext); 

      var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string; 
      if (!string.IsNullOrEmpty(docName)) 
      { 
       // 2. Find out which command is associated with our extension 
       var associatedCmdPath = string.Format(cmdPathTemplate, docName); 
       var associatedCmd = 
        Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string; 

       if (!string.IsNullOrEmpty(associatedCmd)) 
       { 
        Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext); 
       } 
      } 
     } 
    } 
} 
+7

Es mejor utilizar IQueryAssociations –

4

@aku: No se olvide HKEY_CLASSES_ROOT \ SystemFileAssociations \

No estoy seguro si están expuestos en .NET, pero hay interfaces COM (IQueryAssociations y amigos) que tratan con esto para no tener que ensuciar el registro y esperar que las cosas no cambien en la próxima versión de Windows

8

Como dijo Anders: Es una buena idea usar la interfaz COM IQueryAssociations. Aquí hay una sample from pinvoke.net

+2

El enlace incluido es para AssocCreate. El enlace a AssocQuery es este: http: //www.pinvoke.net/default.aspx/shlwapi.AssocQueryString – epotter

1

también HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \

. EXT \ OpenWithList clave para la lista "Ancho abierto ..." (valores de cadena 'a', 'b', 'c', 'd' etc. para las opciones)

. EXT tecla \ UserChoice para el (valor de valor de cadena 'Progid') "Utilizar siempre el programa seleccionado para abrir este tipo de archivo"

Todos los valores son claves, utiliza la misma forma que docName en el ejemplo anterior .

Cuestiones relacionadas