動詞とファイルの関連付け
ユーザーがファイルなどのシェル オブジェクトを右クリックすると、シェルにショートカット (コンテキスト) メニューが表示されます。 このメニューには、ユーザーが項目に対してさまざまなアクションを実行するために選択できるコマンドの一覧が含まれています。 これらのコマンドは、ショートカット メニュー項目または動詞とも呼ばれます。 ショートカット メニューをカスタマイズできます。
このトピックは次のように整理されています。
- ファイル システム オブジェクトのショートカット メニューの概要
- ショートカット メニューの動詞
- ファイル システム以外の項目と OpenSearch の結果をストリーム配信します。
- 任意のファイルの種類を処理するアプリケーションを登録する
- その他のリソース
- 関連トピック
ファイル システム オブジェクトのショートカット メニューの概要
ショートカット メニューは多くの場合、ファイル管理に使用されるため、シェルには、ファイルやフォルダーなどのファイル システム オブジェクトのショートカット メニューに表示される一連の既定のコマンド (切り取りとコピーなど) が用意されています。
次の例は、 MyFile.xyz-ms を右クリックして表示される既定のショートカット メニューを示しています。
MyFile.xyz-ms の既定のショートカット メニューが表示される理由は、.xyz-ms が登録済みのファイルの種類のメンバーではないことが原因です。 これに対 し、.txt は登録済みのファイルの種類です。 .txt ファイルを右クリックすると、上部セクションに 3 つのコマンドが追加されたショートカット メニューが表示されます。[印刷]、[編集]、[ファイルを開く] の順に選択します。
ファイルの種類のショートカット メニューを拡張するには、コマンドごとにレジストリ エントリを作成する必要があります。 より高度な方法は、ファイルごとにファイルの種類のショートカット メニューを拡張できるショートカット メニュー (動詞) ハンドラーを実装することです。 詳細については、「 コンテキスト メニュー ハンドラーの作成」および「 コンテキスト メニュー リファレンス」を参照してください。
ショートカット メニューにコマンドを追加する
ショートカット メニュー ハンドラーは、既存のショートカット メニューにコマンドを追加するファイルの種類のハンドラーです。 ショートカット メニュー ハンドラーはファイルの種類に関連付けられます。クラスのメンバーに対してショートカット メニューが表示されるたびに呼び出されます。 シェルはレジストリをチェックして、ファイルの種類がショートカット メニュー ハンドラーに関連付けられているかどうかを確認します。 その場合、シェルはハンドラーに対して追加のショートカット メニュー項目を照会します。
ショートカット メニューの動詞
ショートカット メニューの各コマンドは、その動詞によってレジストリで識別されます。 これらの動詞は、アプリケーションをプログラムで起動するときに ShellExecuteEx で使用されるものと同じです。
動詞は、関連付けられたコマンドを識別するためにシェルによって使用される単純なテキスト文字列です。 各動詞は、コンソール ウィンドウまたはバッチ (.bat) ファイルでコマンドを起動するために使用されるコマンド文字列に対応します。
たとえば、開いている動詞は通常、ファイルを開くプログラムを起動します。 通常、コマンド文字列は次のようになります。
"My Program.exe" "%1"
コマンド文字列のいずれかの要素にスペースが含まれているか、スペースが含まれている可能性がある場合は、引用符で囲む必要があります。 それ以外の場合、要素にスペースが含まれている場合、正しく解析されません。 たとえば、 "My Program.exe" はアプリケーションを正しく起動します。 引用符なしで My Program.exe を使用すると、システムは最初のコマンド ライン引数として Program.exe を使用して My を起動しようとします。 文字列にスペースが含まれていないことを確実にすることはできませんので、シェルによって文字列に展開される "%1" などの引数には、常に引用符を使用する必要があります。
動詞には、動詞文字列自体の代わりにショートカット メニューに表示される表示名を関連付けることもできます。 たとえば、openas の表示文字列は Open With です。 表示文字列にアンパサンド文字を含む通常のメニュー文字列と同様に、コマンドをキーボードで選択できます。
ファイル システム以外の項目と OpenSearch の結果をストリーム配信します。
Windows 7 以降では、 OpenSearch プロトコルを使用して外部ソースを Windows クライアントに接続できます。 これにより、ユーザーはリモート データ ストアを検索し、Windows エクスプローラー内から結果を表示できます。 OpenSearch v1.1 標準では、データ ストアに対してクライアントが Web サービスに対してクエリを実行する方法と、クライアントによってレンダリングされる結果をサービスが返す方法を記述するために使用できる単純なファイル形式が定義されています。
OpenSearch の結果の場合にアイテムをダウンロードする必要がないように、ファイル システム以外のアイテムをストリーミングすることが必要な場合があります。 フェデレーション検索機能を使用すると、たとえば、SharePoint や他の Web サービスがサポートするサイトなど、OpenSearch をサポートするファイル システム以外の場所からアイテムを検索できます。 これらの項目で動詞を呼び出すと、システムは項目の一時的なバージョンをダウンロードし、動詞の実装に渡します。 動詞の実装者は、アイテムのストリーミングに動詞でサポートされている URL スキーマのセットを登録することで、ファイルをダウンロードする必要を回避することをお勧めします。 動詞は、 SupportedProtocols レジストリ キーを使用して行います。
任意のファイルの種類を処理するアプリケーションを登録する
特定のファイルの種類のショートカット メニュー項目を定義すると、関連付けられているアプリケーションがファイルの種類のメンバーを開く方法を指定できます。 ただし、アプリケーションは、ユーザーがアプリケーションを使用して、アプリケーションに関連付けられていないファイルの種類を開こうとしたときに使用する別の既定のプロシージャを登録することもできます。 ショートカット メニュー項目を登録するのとほぼ同じ方法で、既定のプロシージャを登録します。 ショートカット メニュー項目の定義の詳細については、「 コンテキスト メニュー ハンドラーの作成」を参照してください。
既定のプロシージャは、2 つの基本的な目的を果たします。 1 つは、任意のファイルの種類を開くためにアプリケーションを呼び出す方法を指定することです。 たとえば、コマンド ライン フラグを使用して、不明なファイルの種類が開かれていることを示す場合があります。 もう 1 つの目的は、ショートカット メニュー項目やアイコンなど、ファイルの種類のさまざまな特性を定義することです。 ユーザーがアプリケーションを追加のファイルの種類に関連付ける場合、そのクラスにはこれらの特性があります。 追加のファイルの種類が以前に別のアプリケーションに関連付けられていた場合、これらの特性によって元のファイルが置き換えられます。
既定のプロシージャを登録するには、アプリケーションの ProgID 用に作成したのと同じレジストリ キーを、 のアプリケーションのサブキー の下HKEY_CLASSES_ROOT\Applications配置します。 FriendlyAppName 値を含めて、アプリケーションのフレンドリ名をシステムに指定することもできます。 アプリケーションのフレンドリ名は実行可能ファイルから抽出することもできますが、FriendlyAppName 値が存在しない場合に限られます。
次のサンプル レジストリ エントリは、フレンドリ名といくつかのショートカット メニュー項目を定義する MyProgram.exe の既定の手順を示しています。 コマンド文字列には、任意のファイルの種類を開くことをアプリケーションに通知する /a フラグが含まれています。 DefaultIcon サブキーを含める場合は、汎用アイコンを使用する必要があります。
HKEY_CLASSES_ROOT
MyProgram.exe
shell
open
command
(Default) = C:\MyDir\MyProgram.exe /a "%1"
print
command
(Default) = C:\MyDir\MyProgram.exe /a /p "%1"
printto
command
(Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2"
その他のリソース
- その他の背景については、「 ファイルの関連付けの概要」を参照してください。
- ファイル型ハンドラーを使用してシェルを拡張する方法の概念については、「 シェル拡張ハンドラーの作成」を参照してください。
関連トピック