1

アプリケーション (例: Excel.exe) の場合、アプリケーション (excel.exe) に登録されているすべての拡張子 (例: .xlt、.xlsx など) を知りたいです。それを達成する方法は?

プラットフォーム: Windows

言語: C/C++/C#

4

1 に答える 1

1

残念ながら、ファイル拡張子の登録は、操作が少し複雑になる可能性があります。探している種類の情報を抽出するための決定的な API はありません。インターフェイスはありますがIQueryAssociations、クエリの方法に大きな柔軟性はありません。これは 1 対 1 のクエリに近いものですが、代わりに多対 1 のクエリを探しています。したがって、その情報については、レジストリを直接掘り下げる必要があります。

RegOpenKeyEx()ハイブを開き、ピリオドで始まるキー名を探して、HKEY_CLASSES_ROOTその直接のサブキーをすべて列挙するために使用します。RegEnumKeyEx()これにより、既知のファイル拡張子のリストが表示されます。

HKEY_CLASSES_ROOT\<ext>キーについて、次を確認します。

  1. (Default)空白以外の文字列を含む値。存在する場合、それはファイル拡張子の ProgID です。キーを開いて、アプリケーション パスを含むサブキーがあるHKEY_CLASSES_ROOT\<ProgID>かどうかを確認できます (複数の値が存在する可能性があるため、それらを列挙する必要があります)。存在しない場合は、ProgID キーにサブキーがあるかどうかを確認します。存在する場合、その値は、そのProgID に関連付けられたすべてを処理する COM オブジェクトの になります。キーを開いて、その COM オブジェクトを所有する EXE または DLL ファイルへのフル パスを含む、、またはサブキーがあるかどうかを確認できます。shell\<verb>\command<verb>CLSID(Default)CLSIDHKEY_CLASSES_ROOT\CLSID\<CLSID>InprocHandlerInprocHandler32InprocServerInprocServer32

  2. PersistentHandlerサブキー。存在する場合、その(Default)値は、そのCLSIDファイル拡張子を処理する COM オブジェクトの になります。必要に応じて CLSID を確認できます。

  3. OpenWithProgIdsサブキー。存在する場合は、必要に応じて確認できる ProgID のリストが含まれます。

  4. OpenWithListサブキー。存在する場合は、登録済みのアプリ名のリストが含まれます。キーを開いて、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<AppName>各アプリへのフル パスを取得できます。

他にもいくつかの可能性があります (ShellEx キー、DDE キー、その他のシェル関連の COM オブジェクト キーなど) が、要点はおわかりいただけたと思います。特定のファイル拡張子を処理するアプリを特定するには、多くの調査が必要になる可能性があります。

于 2013-03-23T00:54:34.313 に答える