ホームページ >バックエンド開発 >C++ >Windows でファイル タイプのデフォルト アプリケーションをプログラムで決定するにはどうすればよいですか?

Windows でファイル タイプのデフォルト アプリケーションをプログラムで決定するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-04 01:46:40294ブラウズ

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 を使用すると、特定のファイルのデフォルト アプリケーションをクエリできます。 type.

構文:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。