Question

Comment déterminer les applications associées à une extension particulière (par ex..JPG), puis déterminez où se trouve l'exécutable de cette application afin qu'il puisse être lancé via un appel pour dire System.Diagnostics.Process.Start(...).

Je sais déjà comment lire et écrire dans le registre.C'est la disposition du registre qui rend plus difficile la détermination standard des applications associées à une extension, des noms d'affichage et de l'emplacement de leurs exécutables.

Était-ce utile?

La solution

Exemple de code :

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);
                }
            }
        }
    }
}

Autres conseils

Comme l'a dit Anders : c'est une bonne idée d'utiliser l'interface COM IQueryAssociations.Voici un échantillon de pinvoke.net

@aku :N'oubliez pas HKEY_CLASSES_ROOT\SystemFileAssociations\

Je ne sais pas s'ils sont exposés dans .NET, mais il existe des interfaces COM (IQueryAssociations et amis) qui gèrent cela, vous n'avez donc pas à fouiller dans le registre et j'espère que les choses ne changeront pas dans la prochaine version de Windows.

Également HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\

.EXTClé \OpenWithList pour la liste "Largeur d'ouverture..." (valeurs de chaîne 'a', 'b', 'c', 'd' etc. pour les choix)

.EXT\ Clé UserChoice pour "Toujours utiliser le programme sélectionné pour ouvrir ce type de fichier" (valeur de chaîne 'Progid')

Toutes les valeurs sont des clés, utilisées de la même manière que Nom du document dans l'exemple ci-dessus.

Les associations de types de fichiers sont stockées dans le registre Windows, vous devriez donc pouvoir utiliser le Classe Microsoft.Win32.Registry pour savoir quelle application est enregistrée pour quel format de fichier.

Voici deux articles qui pourraient être utiles :

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top