雑記帳

整理しない情報集

拡張子やURLプロトコルをアプリ選択画面に関連付ける

公開日:

カテゴリ: Windows

アプリ選択画面

拡張子やURLプロトコルをアプリ選択画面に関連付け、毎回開くアプリを選択できるようにする方法を紹介します。

TL;DR

rem 共通で必要なレジストリ
reg add "HKLM\SOFTWARE\OpenWith\Capabilities" /v "ApplicationName" /t REG_SZ /d "OpenWith"
reg add "HKLM\SOFTWARE\OpenWith\Capabilities" /v "ApplicationDescription" /t REG_SZ /d "任意のプログラムを選択"
reg add "HKLM\SOFTWARE\RegisteredApplications" /v "OpenWith" /t REG_SZ /d "SOFTWARE\OpenWith\Capabilities"
reg add "HKLM\SOFTWARE\Classes\OpenWith" /ve /t REG_SZ /d "OpenWith"
reg add "HKLM\SOFTWARE\Classes\OpenWith" /v "AppUserModelId" /t REG_SZ /d "OpenWith"
reg add "HKLM\SOFTWARE\Classes\OpenWith\shell\open\command" /ve /t REG_SZ /d "\"C:\Windows\System32\OpenWith.exe\" %1"

rem 拡張子単位で実行(以下は.htmlと.htmに関連付ける例)
reg add "HKLM\SOFTWARE\OpenWith\Capabilities\FileAssociations" /v ".html" /t REG_SZ /d "OpenWith"
reg add "HKLM\SOFTWARE\OpenWith\Capabilities\FileAssociations" /v ".htm" /t REG_SZ /d "OpenWith"

rem URLプロトコル単位で実行(以下はhttpとhttpsに関連付ける例)
reg add "HKLM\SOFTWARE\OpenWith\Capabilities\URLAssociations" /v "http" /t REG_SZ /d "OpenWith"
reg add "HKLM\SOFTWARE\OpenWith\Capabilities\URLAssociations" /v "https" /t REG_SZ /d "OpenWith"

上記コマンドを実行後、設定アプリで関連付けを行えば完了です。

概要

アプリ選択画面の実体は以下のファイルです。

C:\Windows\System32\OpenWith.exe

関連付けされていないファイル形式を実行しようとしたとき、もしくは開こうとしたファイルに対応するアプリケーションが新しくインストールされた後の初回実行時に自動実行され、アプリ選択画面が表示されます。

OpenWith.exeの関連付けエラー

ただし、設定画面で OpenWith.exe を関連付けしようとすると、上記のメッセージが表示されて関連付けできません。そこで、レジストリで OpenWith.exe を1つのアプリケーションとして登録しておき、関連付けの画面で選択できるようにします。

ご注意

本記事では、手動でレジストリの操作を行うため、誤った操作にはくれぐれもご注意ください。

方法

本手順ではすべてのユーザに対して適用される HKEY_LOCAL_MACHINE で実行しますが、おそらくユーザ単位の HKEY_CURRENT_USER (HKEY_USER) でも可能と思われます(動作確認はしておりません)。

アプリケーションの登録(共通)

まず以下のキーを追加します。

HKEY_LOCAL_MACHINE\SOFTWARE\OpenWith\Capabilities

次に作成したキーの中に以下の文字列値を追加します。値は適当でも大丈夫です。

  • ApplicationName
    • 値: OpenWith
  • ApplicationDescription
    • 値: 任意のプログラムを選択

最後に以下のキーに文字列値を追加して本項は完了です。

HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications
  • OpenWith
    • 値: SOFTWARE\OpenWith\Capabilities

ここで指定した文字列値の名前 OpenWith は後で使います(A)。

アプリケーションの登録(拡張子に関連付ける場合)

先ほど作成した Capabilities キーの中に、新しく以下のキーを作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\OpenWith\Capabilities\FileAssociations

このキーの中に、文字列値として拡張子とクラス名(後で使います(B))の組み合わせを登録します。特に事情がなければ、すべて同じクラス名で大丈夫です。複数登録できます。

以下は、拡張子 .html.htm に対して設定する例です。拡張子の1文字前のピリオドも必要です。

  • .html
    • 値: OpenWith
  • .htm
    • 値: OpenWith

アプリケーションの登録(URLプロトコルに関連付ける場合)

拡張子に関連付けするときと同様に Capabilities キーの中に、新しく以下のキーを作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\OpenWith\Capabilities\URLAssociations

このキーの中に、文字列値としてURLプロトコルとクラス名(後で使います(B))の組み合わせを登録します。こちらも特に事情がなければ、すべて同じクラス名で大丈夫です。複数登録できます。

以下は、拡張子 httphttps に対して設定する例です。入力するのはURLのコロンの手前までの文字列です。

  • http
    • 値: OpenWith
  • https
    • 値: OpenWith

クラスの登録

まず、以下のキーを開きます。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes

このキーの中にアプリケーションの登録で追加したクラス名(B)のキーを作成します。クラス名を単一ではなく複数種類設定した場合は、設定した分だけ以下の手順を実行します。本手順通りであれば、以下のキーを作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OpenWith

まず、このキーの既定の値にクラス名(B)をセットします。さらに、AppUserModelId には(A)の値をセットします。本手順通りであれば、以下になります。

  • (既定)
    • 値: OpenWith
  • AppUserModelId
    • 値: OpenWith

次に、このキーの中に以下のキーを作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OpenWith\shell\open\command

このキーの既定の値に、 OpenWith.exe までの実行パスと引数を設定します。

  • (既定)
    • 値: "C:\Windows\System32\OpenWith.exe" %1

設定アプリで関連付け

ここまでの手順を進めると、設定アプリで関連付けができるようになるので、あとは通常の既定のアプリの変更手順と同じです。

設定アプリで関連付け

設定アプリを開き、アプリ→既定のアプリと遷移していき、拡張子の場合はファイルの種類、URLプロトコルの場合はリンクの種類から設定値を アプリの選択 に変更します。

補足など

  • URLプロトコルの httphttps の既定のアプリの設定は特殊で、どちらかの既定のアプリを変更すると連動してもう片方も自動で切り替わります
    • どちらか片方のプロトコルにしか登録されていないアプリは、どちらも選択肢に表示されません

カテゴリ: Windows