Heim > Backend-Entwicklung > C++ > Wie kann ich programmgesteuert die Standardanwendung für einen bestimmten Dateityp in Windows finden?

Wie kann ich programmgesteuert die Standardanwendung für einen bestimmten Dateityp in Windows finden?

Barbara Streisand
Freigeben: 2025-01-05 12:13:40
Original
400 Leute haben es durchsucht

How Can I Programmatically Find the Default Application for a Specific File Type in Windows?

Die Standardanwendung für Dateitypen in Windows finden

Entwickler müssen häufig die Standardanwendung finden, die einem bestimmten Dateityp zugeordnet ist. Dies ist wichtig für Aufgaben wie das Aufrufen des Standardeditors für eine bestimmte Dateierweiterung.

Um dies zu erreichen, könnte man erwägen, System.Diagnostics.Process.Start zu verwenden, um eine Datei in ihrer Standardanwendung zu öffnen. Dieser Ansatz ist jedoch begrenzt und ermöglicht nicht das Öffnen von Dateien mit nicht standardmäßigen Erweiterungen.

Die zuverlässige Lösung besteht darin, die Win32-API-Funktion AssocQueryString zu verwenden. Diese Funktion ermöglicht die Abfrage des Betriebssystems nach der Standardanwendung, die einem Dateityp zugeordnet ist.

So können Sie AssocQueryString in C# nutzen:

using System.Runtime.InteropServices;

[DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
public static extern uint AssocQueryString(
    AssocF flags, 
    AssocStr str,  
    string pszAssoc, 
    string pszExtra, 
    [Out] StringBuilder pszOut, 
    ref uint pcchOut
); 

[Flags]
public enum AssocF
{
    // ...
}

public enum AssocStr
{
    // ...
}

public static string AssocQueryString(AssocStr association, string extension)
{
    const int S_OK = 0;
    const int S_FALSE = 1;

    uint length = 0;
    uint ret = AssocQueryString(AssocF.None, association, extension, null, null, ref length);
    if (ret != S_FALSE)
    {
        throw new InvalidOperationException("Could not determine associated string");
    }

    var sb = new StringBuilder((int)length); 
    ret = AssocQueryString(AssocF.None, association, extension, null, sb, ref length);
    if (ret != S_OK)
    {
        throw new InvalidOperationException("Could not determine associated string"); 
    }

    return sb.ToString();
}
Nach dem Login kopieren

Indem Sie AssocQueryString aufrufen und die gewünschte Zuordnung angeben, Sie können den vollständigen Pfad zur Standardanwendung abrufen. Dadurch können Sie direkt mit dem Standardeditor oder -prozessor für einen bestimmten Dateityp interagieren, auch wenn die Datei keine Standarderweiterung hat.

Das obige ist der detaillierte Inhalt vonWie kann ich programmgesteuert die Standardanwendung für einen bestimmten Dateityp in Windows finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage