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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 01:46:40274parcourir

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

Récupération de l'application par défaut pour un type de fichier sous Windows

Pour déterminer l'application par défaut pour ouvrir des fichiers d'un type spécifique, vous pouvez utiliser le registre Windows. Dans HKEY_CLASSES_ROOT, chaque extension de fichier a une clé correspondante. L'application par défaut est stockée dans la valeur par défaut de cette clé.

Considérez l'exemple suivant pour ouvrir des fichiers HTML :

  • Accédez à HKEY_CLASSES_ROOT.html
  • La valeur par défaut La valeur contiendra la clé de registre de l'application par défaut, par exemple, HTMLFile

Cette méthode, a cependant des limites. Il repose sur l'implémentation du registre, qui peut différer selon les versions de Windows. Une approche plus fiable implique la fonction API Win32 AssocQueryString.

AssocQueryString

AssocQueryString vous permet d'interroger l'application par défaut pour un fichier spécifique tapez.

Syntaxe :

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

Drapeaux :

  • AssocF.None : utiliser les paramètres par défaut
  • AssocF.Open_ByExeName : Requête de l'application par défaut par son exécutable name

Str:

  • AssocStr.Command : Récupérer la commande utilisée pour ouvrir les fichiers avec l'extension spécifiée

Exemple :

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

Cette approche offre un moyen plus fiable pour déterminer l'application par défaut pour un type de fichier sous Windows.

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!

Déclaration:
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