Maison > développement back-end > C++ > Comment puis-je trouver par programme l'application par défaut pour un type de fichier spécifique sous Windows ?

Comment puis-je trouver par programme l'application par défaut pour un type de fichier spécifique sous Windows ?

Barbara Streisand
Libérer: 2025-01-05 12:13:40
original
400 Les gens l'ont consulté

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

Recherche de l'application par défaut pour les types de fichiers sous Windows

Les développeurs doivent souvent trouver l'application par défaut associée à un type de fichier spécifique. Ceci est important pour des tâches telles que l'appel de l'éditeur par défaut pour une extension de fichier particulière.

Pour y parvenir, on peut envisager d'utiliser System.Diagnostics.Process.Start pour ouvrir un fichier dans son application par défaut. Cependant, cette approche est limitée et ne permet pas l'ouverture de fichiers avec des extensions non standards.

La solution fiable consiste à utiliser la fonction AssocQueryString de l'API Win32. Cette fonction permet d'interroger le système d'exploitation pour l'application par défaut associée à un type de fichier.

Voici comment exploiter AssocQueryString en C# :

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();
}
Copier après la connexion

En appelant AssocQueryString et en spécifiant l'association souhaitée, vous pouvez récupérer le chemin complet de l'application par défaut. Cela vous permet d'interagir directement avec l'éditeur ou le processeur par défaut pour un type de fichier particulier, même si le fichier n'a pas d'extension standard.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal