首頁 >後端開發 >C++ >如何以程式設計方式確定 Windows 中文件類型的預設應用程式?

如何以程式設計方式確定 Windows 中文件類型的預設應用程式?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 01:46:40276瀏覽

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:

    Ass ocStr.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