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

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

Barbara Streisand
リリース: 2025-01-05 12:13:40
オリジナル
363 人が閲覧しました

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

Windows でファイル タイプのデフォルト アプリケーションを見つける

開発者は多くの場合、特定のファイル タイプに関連付けられたデフォルト アプリケーションを見つける必要があります。これは、特定のファイル拡張子のデフォルトのエディターを呼び出すなどのタスクにとって重要です。

これを実現するには、System.Diagnostics.Process.Start を使用して、デフォルトのアプリケーションでファイルを開くことを検討できます。ただし、このアプローチには制限があり、標準以外の拡張子を持つファイルを開くことはできません。

信頼できる解決策には、Win32 API 関数 AssocQueryString の使用が含まれます。この関数を使用すると、ファイルの種類に関連付けられたデフォルトのアプリケーションをオペレーティング システムに問い合わせることができます。

C# で AssocQueryString を利用する方法は次のとおりです。

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();
}
ログイン後にコピー

AssocQueryString を呼び出して、目的の関連付けを指定すると、デフォルトのアプリケーションへのフルパスを取得できます。これにより、ファイルに標準の拡張子がない場合でも、特定のファイル タイプのデフォルトのエディタまたはプロセッサと直接対話できるようになります。

以上がWindows で特定のファイル タイプのデフォルト アプリケーションをプログラムで見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート