Frage

Wie die Anwendungen mit einer bestimmten Erweiterung (zB .JPG) und dann zu bestimmen, wo die ausführbare Datei zu dieser Anwendung zugeordnet, um zu bestimmen ist so angeordnet, dass sie über einen Aufruf gestartet werden kann System.Diagnostics.Process.Start sagen, (.. )..

Ich weiß schon, wie man die Registry lesen und schreiben. Es ist das Layout der Registrierung, die es schwieriger zu bestimmen, in üblichen Weise macht, welche Anwendungen mit einer Erweiterung verbunden sind, was sind die Anzeigenamen, und wo ihre ausführbaren Dateien befinden.

War es hilfreich?

Lösung

Beispielcode:

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

Andere Tipps

Wie Anders gesagt - es ist eine gute Idee, die IQueryAssociations COM-Schnittstelle zu verwenden. Hier ist eine Probe von pinvoke.net

@aku: Vergessen Sie nicht HKEY_CLASSES_ROOT \ SystemFileAssociations \

Nicht sicher, ob sie in .NET ausgesetzt sind, aber es gibt COM-Schnittstellen (IQueryAssociations und Freunde), die sie mit diesem so müssen Sie nicht um in der Registrierung Dreck und hoffen, dass Sachen nicht ändern, in der nächsten Windows-Version

Auch HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Currentversion \ Explorer \ FileExts \

. EXT \ Openwithlist Schlüssel für die "Open Breite ..." -Liste ( 'a', 'b', 'c' usw. String-Werte für die Auswahl 'd')

. EXT \ UserChoice Schlüssel für den "immer mit dem ausgewählten Programm diese Art von Datei öffnen" ( 'Progid' String-Wert-Wert)

Alle Werte sind die Schlüssel, verwendeten die gleiche Art und Weise wie docName im Beispiel oben.

Die Dateitypzuordnungen in der Windows-Registrierung gespeichert werden, so dass Sie in der Lage sein sollten, die Microsoft.Win32.Registry Klasse zu lesen, welche Anwendung für das Dateiformat registriert ist.

Hier sind zwei Artikel, die hilfreich sein könnten:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top