アプリケーション (例: Excel.exe) の場合、アプリケーション (excel.exe) に登録されているすべての拡張子 (例: .xlt、.xlsx など) を知りたいです。それを達成する方法は?
プラットフォーム: Windows
言語: C/C++/C#
アプリケーション (例: Excel.exe) の場合、アプリケーション (excel.exe) に登録されているすべての拡張子 (例: .xlt、.xlsx など) を知りたいです。それを達成する方法は?
プラットフォーム: Windows
言語: C/C++/C#
残念ながら、ファイル拡張子の登録は、操作が少し複雑になる可能性があります。探している種類の情報を抽出するための決定的な API はありません。インターフェイスはありますがIQueryAssociations
、クエリの方法に大きな柔軟性はありません。これは 1 対 1 のクエリに近いものですが、代わりに多対 1 のクエリを探しています。したがって、その情報については、レジストリを直接掘り下げる必要があります。
RegOpenKeyEx()
ハイブを開き、ピリオドで始まるキー名を探して、HKEY_CLASSES_ROOT
その直接のサブキーをすべて列挙するために使用します。RegEnumKeyEx()
これにより、既知のファイル拡張子のリストが表示されます。
各HKEY_CLASSES_ROOT\<ext>
キーについて、次を確認します。
(Default)
空白以外の文字列を含む値。存在する場合、それはファイル拡張子の ProgID です。キーを開いて、アプリケーション パスを含むサブキーがあるHKEY_CLASSES_ROOT\<ProgID>
かどうかを確認できます (複数の値が存在する可能性があるため、それらを列挙する必要があります)。存在しない場合は、ProgID キーにサブキーがあるかどうかを確認します。存在する場合、その値は、そのProgID に関連付けられたすべてを処理する COM オブジェクトの になります。キーを開いて、その COM オブジェクトを所有する EXE または DLL ファイルへのフル パスを含む、、またはサブキーがあるかどうかを確認できます。shell\<verb>\command
<verb>
CLSID
(Default)
CLSID
HKEY_CLASSES_ROOT\CLSID\<CLSID>
InprocHandler
InprocHandler32
InprocServer
InprocServer32
PersistentHandler
サブキー。存在する場合、その(Default)
値は、そのCLSID
ファイル拡張子を処理する COM オブジェクトの になります。必要に応じて CLSID を確認できます。
OpenWithProgIds
サブキー。存在する場合は、必要に応じて確認できる ProgID のリストが含まれます。
OpenWithList
サブキー。存在する場合は、登録済みのアプリ名のリストが含まれます。キーを開いて、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<AppName>
各アプリへのフル パスを取得できます。
他にもいくつかの可能性があります (ShellEx キー、DDE キー、その他のシェル関連の COM オブジェクト キーなど) が、要点はおわかりいただけたと思います。特定のファイル拡張子を処理するアプリを特定するには、多くの調査が必要になる可能性があります。