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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-04 01:46:40295Durchsuche

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

Abrufen der Standardanwendung für einen Dateityp in Windows

Um die Standardanwendung zum Öffnen von Dateien eines bestimmten Typs zu ermitteln, können Sie diese verwenden die Windows-Registrierung. In HKEY_CLASSES_ROOT hat jede Dateierweiterung einen entsprechenden Schlüssel. Die Standardanwendung wird im Standardwert dieses Schlüssels gespeichert.

Betrachten Sie das folgende Beispiel zum Öffnen von HTML-Dateien:

  • Navigieren Sie zu HKEY_CLASSES_ROOT.html
  • Der Standard Der Wert enthält den Registrierungsschlüssel für die Standardanwendung, z. B. HTMLFile

This Die Methode weist jedoch Einschränkungen auf. Es basiert auf der Implementierung der Registrierung, die je nach Windows-Version unterschiedlich sein kann. Ein zuverlässigerer Ansatz ist die Win32-API-Funktion AssocQueryString.

AssocQueryString

AssocQueryString ermöglicht es Ihnen, die Standardanwendung nach einer bestimmten Datei abzufragen Typ.

Syntax:

uint AssocQueryString(
    AssocF flags, 
    AssocStr str,  
    string pszAssoc, 
    string pszExtra, 
    [Out] StringBuilder pszOut, 
    ref uint pcchOut
); 

Flags:

  • AssocF.None: Standardeinstellungen verwenden
  • AssocF.Open_ByExeName: Abfrage der Standardanwendung anhand ihrer Name der ausführbaren Datei

Str:

  • AssocStr.Command: Rufen Sie den Befehl ab, der zum Öffnen von Dateien mit der angegebenen Erweiterung verwendet wird

Beispiel:

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

AssocF flags = AssocF.Open_ByExeName;
AssocStr str = AssocStr.Command;
StringBuilder sb = new StringBuilder();
uint pcchOut = 0;

uint ret = AssocQueryString(flags, str, ".txt", null, sb, ref pcchOut);
if (ret == 0)
{
    Console.WriteLine($"Default text editor: {sb.ToString()}");
}
else
{
    Console.WriteLine("Error retrieving default text editor.");
}

Dies Der Ansatz bietet eine zuverlässigere Möglichkeit, die Standardanwendung für einen Dateityp in Windows zu bestimmen.

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

Stellungnahme:
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