首页 >后端开发 >C++ >如何以编程方式确定 Windows 中文件类型的默认应用程序?

如何以编程方式确定 Windows 中文件类型的默认应用程序?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-04 01:46:40314浏览

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

检索 Windows 中文件类型的默认应用程序

要确定打开特定类型文件的默认应用程序,您可以使用Windows 注册表。在HKEY_CLASSES_ROOT中,每个文件扩展名都有一个对应的键。默认应用程序存储在此键的默认值中。

请考虑以下打开 HTML 文件的示例:

  • 导航到 HKEY_CLASSES_ROOT.html
  • 默认值值将包含默认应用程序的注册表项,例如, HTMLFile

但是,此方法有局限性。它依赖于注册表的实现,这可能因 Windows 版本而异。更可靠的方法涉及 Win32 API 函数 AssocQueryString。

AssocQueryString

AssocQueryString 允许您查询特定文件的默认应用程序类型。

语法:

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

标志:

  • AssocF.None:使用默认设置
  • AssocF.Open_ByExeName:按可执行文件名称查询默认应用程序

Str:

  • AssocStr.Command:检索用于打开指定文件的命令扩展名

示例:

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

此方法提供了一种更可靠的方法来确定 Windows 中文件类型的默认应用程序。

以上是如何以编程方式确定 Windows 中文件类型的默认应用程序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn