2024年5月17日金曜日

「登録されている拡張子は表示しない」 の『登録されている』とは何か?レジストリ内部から解説

Windows 10 のデフォルト設定では、拡張子は表示されないようになっていますが、一目でファイルの種類を判別するためには拡張子を表示する設定が便利です。

その設定にある登録されている拡張子は表示しない登録されているとはどのような拡張子を指すのでしょうか。

登録されていない拡張子

  1. .png .webp と仮想の拡張子 .nonsubject の 3 つのファイルがあります。

  2. 登録されている拡張子は表示しない

    Hide extensions for known file types

  3. しかし、登録されていない.nonsubject の拡張子は表示されたままです。

登録されている拡張子とは何か

条件 1 と 2 のどちらかか両方満たす場合に登録されている拡張子になります。

  • 条件1 : HKCR に拡張子が登録してある

    • 拡張子 (.nonsubject) のレジストリキーがあること。

      HKEY_CLASSES_ROOT\.nonsubject

    • 拡張子のキーの既定に参照先の値があること。
      (例 nonsubject_auto_file)

    • 参照先のキーが実際に存在すること

      HKEY_CLASSES_ROOT\nonsubject_auto_file

    通常のプログラムが関連付けをする方法です。

    .nonsubjectnonsubject_auto_file キーには openedit など実行が設定されていなくても構わない。キーが存在するだけで登録されていると判定される。

    そのため、厳密には起動するプログラムがなくても登録されている拡張子になりうる。

  • 条件2 : FileExts に拡張子が登録してある

    ユーザーが選択したプログラムがある場合。

    HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.nonsubject\UserChoice

    プログラムから開く の操作で作成されるキーです。次のセクションでもう少し詳しく解説します。

どちらかの条件を満たしていれば登録されている拡張子となります。

例外 : AlwaysShowExt と NeverShowExt

AlwaysShowExt 値があるファイルタイプは必ず拡張子を表示して、NeverShowEx 値があると絶対に表示しません。

  • AlwaysShowExt の例

    HKCR\Unknown (登録されていないファイルタイプ)

    HKCR\Directory (ディレクトリ)

    HKCR\dllfile (.dll)

  • NeverShowEx の例

    HKCR\lnkfile (.lnk)

    HKCR\LibraryFolder (.library-ms)

    HKCR\SearchFolder (.search-ms)

プログラムから開く の動作

  1. 未登録の拡張子(.nonsubject)のファイルは開くことができません。

    この種類のファイル (.nonsubject) を開くことはできません

  2. この PC のアプリで開く からアプリ(メモ帳)を選択するとレジストリキーが作成されます。

    HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.nonsubject

    履歴などが保存されますが、まだ拡張子は登録されていない状態です。

  3. 常にこのアプリを使って…をチェックしてアプリを起動すると UserChoice キーが追加され関連付けされます。また、元もと拡張子の登録がなかった場合は条件 1 のレジストリも同時に追加されます。

    FileExts\.nonsubject\UserChoice

    この状態までいくと拡張子(.nonsubject)は登録されている状態になります。