次の方法で共有


ショートカット メニューの拡張

通常、オブジェクトを右クリックすると 、ショートカット メニューが表示されます。 このメニューには、ユーザーがオブジェクトに対してさまざまなアクションを実行するために選択できるコマンドの一覧が含まれています。 このセクションでは、ファイル システム オブジェクトのショートカット メニューの概要について説明します。

追加情報については、以下を参照してください。

ファイル システム オブジェクトのショートカット メニュー

エクスプローラーまたはデスクトップに表示されるファイルなどのオブジェクトをユーザーが右クリックすると、ショートカット メニューにコマンドの一覧が表示されます。 その後、ユーザーは適切なコマンドを選択して、ファイルを開いたり削除したりするなどのアクションをファイルに対して実行できます。

ショートカット メニューはファイル管理によく使用されるため、 Shell には、任意のファイルのショートカット メニューに表示される一連の既定のコマンド (切り取りとコピーなど) が用意されています。 Open With は既定のコマンドですが、.wavなどの一部の標準ファイルの種類では表示されないことに注意してください。 次の図は、 アイコンのカスタマイズの例としても使用されたサンプルのマイ ドキュメント ディレクトリで、MyDocs4.xyz を右クリックして表示された既定のショートカット メニューを示しています。

ファイル システム オブジェクトの既定のショートカット メニューのスクリーン ショット

既定のショートカット メニュー MyDocs4.xyz 表示される理由は、登録されている ファイルの種類のメンバーではないためです。 一方、.txt は登録済みのファイルの種類です。 .txt ファイルの 1 つを右クリックすると、ショートカット メニューが表示され、その上部セクションに 2 つのコマンドが追加されます: 開く印刷します。

ファイル システム オブジェクトのカスタマイズされたショートカット メニューのスクリーン ショット

ファイルの種類が登録されたら、そのショートカット メニューを追加のコマンドで拡張できます。 その種類のファイルが右クリックされると、既定のコマンドの上に表示されます。 この方法で追加されるコマンドのほとんどは、 印刷くなどの一般的なコマンドですが、ユーザーが役に立つコマンドを自由に追加できます。

ファイルの種類のショートカット メニューを拡張するために必要なのは、各コマンドのレジストリ エントリを作成することです。 より高度な方法は、 ショートカット メニュー ハンドラーを実装することです。これにより、ファイルごとにファイルの種類のショートカット メニューを拡張できます。 詳細については、「 コンテキスト メニュー ハンドラーの作成」を参照してください。

ショートカット メニューの動詞

ショートカット メニューの各コマンドは、その verbによってレジストリで識別されます。 これらの動詞は、アプリケーションをプログラムで起動するときに ShellExecuteEx で使用されるものと同じです。 ShellExecuteEx の使用方法の詳細については、「アプリケーションの起動」の説明を参照してください。

verbは、関連付けられたコマンドを識別するためにShellによって使用される単純なテキスト文字列です。 各 verb は、コンソール ウィンドウまたはバッチ (.bat) ファイルでコマンドを起動するために使用されるコマンド 文字列 に対応します。 たとえば、 開いているverb は通常、ファイルを開くプログラムを起動します。 通常、そのコマンド文字列は次のようになります。

"My Program.exe" "%1"

"%1" は、ファイル名で指定されたコマンド ライン パラメーターの標準プレースホルダーです。 たとえば、タブ付きビューに表示する特定のページを指定できます。

コマンド文字列のいずれかの要素にスペースが含まれている場合、またはスペースを含む可能性がある場合は、引用符で囲む必要があります。 それ以外の場合、要素にスペースが含まれている場合、正しく解析されません。 たとえば、"My Program.exe" はアプリケーションを正しく起動します。 My Program.exeを使用すると、システムは最初のコマンド ライン引数として "Program.exe" を指定して "My" を起動しようとします。 文字列にスペースが含まれていないことを確信できないため、 Shellによって文字列に展開される "%1" などの引数には、常に引用符を使用する必要があります。

 

動詞には、ショートカット メニューに表示文字列を関連付けることができ、これはverb文字列自体の代わりに表示されます。 たとえば、 openas の表示文字列は Open With です。 表示文字列にアンパサンド (&) を含む通常のメニュー文字列と同様に、コマンドをキーボードで選択できます。

正規動詞

一般に、アプリケーションは、定義する動詞にローカライズされた表示文字列を提供する役割を担います。 ただし、言語に依存する程度を提供するために、システムは 正規動詞と呼ばれる一般的に使用される動詞の標準セットを定義します。 正規の verb は任意の言語で使用でき、適切にローカライズされた表示文字列が自動的に生成されます。 たとえば、 openverb の表示文字列は、英語システムでは Open に、ドイツ語システムでは Öffnen に設定されます。

正規動詞には次のものが含まれます。

価値 説明
オープン ファイルまたはフォルダーを開きます。
opennew ファイルまたはフォルダーを新しいウィンドウで開きます。
印刷する ファイルを出力します。
探る フォルダーが選択された状態で Windows エクスプローラーを開きます。
検索する フォルダーが既定の検索場所として設定された [Windows 検索 ] ダイアログ ボックスを開きます。
openas [ ファイルを開く ] ダイアログ ボックスを開きます。
プロパティ オブジェクトのプロパティ シートを開きます。

 

printto verb も正規ですが、表示されません。 これにより、ユーザーはファイルをプリンター オブジェクトにドラッグして印刷できます。

拡張動詞

ユーザーがオブジェクトを右クリックすると、ショートカット メニューにはすべての通常の動詞が含まれます。 ただし、サポートする必要があるが、すべてのショートカット メニューに表示されていないコマンドが存在する可能性があります。 たとえば、一般的に使用されないコマンドや、経験豊富なユーザーを対象としたコマンドがあるとします。 このため、1 つ以上の 拡張動詞を定義することもできます。 これらの動詞も文字列であり、通常の動詞に似ています。 これらは、登録方法によって通常の動詞と区別されます。 拡張動詞に関連付けられているコマンドにアクセスするには、Shift キーを押しながらオブジェクトを右クリックする必要があります。 その後、拡張動詞が通常の動詞と共に表示されます。

ファイル種類に対するショートカットメニューの拡張

ファイルの種類のショートカット メニューを拡張する最も簡単な方法は、レジストリを使用することです。 これを行うには、ファイルの種類に関連付けられているアプリケーションの ProgID のキーの下に、 Shell サブキーを追加 します。 必要に応じて、Shell サブキーの既定値にすることで、ファイルの種類の既定のverbを定義できます。

既定の verb がショートカット メニューに最初に表示されます。 その目的は、ShellExecuteEx が呼び出されていてもverbが指定されていない場合に使用できるverbをShellに提供するためです。 この方法で ShellExecuteEx を使用する場合、Shellは必ずしも既定のverbを選択するとは限りません。 Windows 2000 以降のシステムで見つかった Shellversions 5.0 以降の場合、 Shell では、次の一覧の最初の使用可能な verb が使用されます。 もし利用可能なものがない場合、操作は失敗します。

  • 開いている verb
  • 既定値 verb
  • レジストリの最初のverb
  • openwith verb

バージョン 5.0 より前のバージョンShell場合は、3 番目の項目を省略します。

Shellサブキーの下に、追加するverbごとに 1 つのサブキーを作成します。 これらの各サブキーには、verbの表示文字列にREG_SZ値が設定されます。 正しくローカライズされた文字列がシステムによって自動的に表示されるため、正規動詞の表示文字列を省略できます。 非文字動詞の表示文字列を省略すると、 verb 文字列が表示されます。 verbサブキーごとに、既定値がコマンド文字列に設定されたコマンド サブキーを作成します。

次の図は、[ファイルの種類] と [アイコンのカスタマイズ] で使用される .myp ファイルの種類 のショートカット メニュー を示しています。 ショートカットメニューに、デフォルトの doit とは別に、開く、doit、印刷、および printto の動詞が含まれるようになりました。 ショートカット メニューは次のようになります。

カスタマイズされたショートカット メニューのスクリーン ショット

前の図に示したショートカット メニューの拡張に使用されるレジストリ エントリは次のとおりです。

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4

Open With コマンドは最初の区切り記号の上にありますが、システムによって自動的に作成され、レジストリ エントリは必要ありません。 システムは標準動詞「open」および「print」の表示名を自動的に生成します。 doit は正規の verbではないため、D キーを押して選択できる表示名 ">Do It" が割り当てられます。 printto verb はショートカット メニューには表示されませんが、含めると、ユーザーはプリンター アイコンにドロップしてファイルを印刷できます。 この例では、%1 はファイル名を表し、プリンター名 %2 します。

verbのキーに SuppressionPolicy 値を追加することで、ポリシー設定によって動詞を抑制できます。 SuppressionPolicy の値をポリシー ID に設定します。 ポリシーが有効になっている場合、 verb とそれに関連付けられているショートカット メニューエントリは表示されません。 使用可能なポリシー ID 値については、「RESTRICTIONS 列挙型」を参照してください。

定義済みの Shell オブジェクトのショートカット メニューを拡張する

多くの定義済みの Shell オブジェクトには、拡張できるショートカット メニューがあります。 一般的なファイルの種類を登録するのとほぼ同じ方法でコマンドを登録しますが、定義済みのオブジェクトの名前をファイルの種類名として使用します。

定義済みのオブジェクトの一覧は、「拡張ハンドラーの作成」の「定義済みのShell オブジェクト」セクションShell参照してください。 レジストリに動詞を追加することでショートカット メニューを拡張できる定義済みの Shell オブジェクトは、テーブル内で "Verb" という単語でマークされます。

任意のファイルの種類を処理するアプリケーションの登録

このドキュメントの前のセクションでは、特定のファイルの種類のショートカット メニュー項目を定義する方法について説明しました。 特に、ショートカット メニューを定義すると、関連付けられているアプリケーションがファイルの種類のメンバーを開く方法を指定できます。 ただし、「 ファイルの種類」で説明したように、アプリケーションは、アプリケーションに関連付けられていないファイルの種類をユーザーがアプリケーションを使用して開こうとしたときに使用する別の既定のプロシージャを登録することもできます。 ここでは、ショートカット メニュー項目を登録するのとほぼ同じ方法で既定のプロシージャを登録するため、このトピックについて説明します。

既定のプロシージャは、2 つの基本的な目的を果たします。 1 つは、任意のファイルの種類を開くためにアプリケーションを呼び出す方法を指定することです。 たとえば、コマンド ライン フラグを使用して、不明なファイルの種類が開かれていることを示します。 もう 1 つの目的は、ショートカット メニュー項目やアイコンなど、ファイルの種類のさまざまな特性を定義することです。 ユーザーがアプリケーションを追加のファイルの種類に関連付ける場合、その種類にはこれらの特性があります。 追加のファイルの種類が以前に別のアプリケーションに関連付けられている場合は、これらの特性によって元のファイルが置き換えられます。

既定のプロシージャを登録するには、アプリケーションの ProgID 用に作成したのと同じレジストリ キーを、アプリケーションの HKEY_CLASSES_ROOT\Applications のサブキーの下に配置します。 FriendlyAppName 値を含めて、アプリケーションのフレンドリ名をシステムに提供することもできます。 アプリケーションのフレンドリ名は、FriendlyAppName 値が存在しない場合にのみ、実行可能ファイルから抽出することもできます。 次のレジストリ フラグメントは、フレンドリ名といくつかのショートカット メニュー項目を定義する MyProgram.exe の既定の手順の例を示しています。 コマンド文字列には、任意のファイルの種類を開くことをアプリケーションに通知する /a フラグが含まれています。 DefaultIcon サブキーを含める場合は、汎用アイコンを使用する必要があります。

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         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" %3 %4

新しいサブメニューの拡張

ユーザーがエクスプローラーで [ファイル ] メニューを開くと、最初のコマンドは [新規] になります。 このコマンドを選択すると、サブメニューが表示されます。 既定では、フォルダーとショートカットの 2 つのコマンドが含まれており、ユーザーはサブフォルダーとショートカットを作成できます。 このサブメニューは、任意のファイルの種類のファイル作成コマンドを含むように拡張できます。

[ 新規 ] サブメニューにファイル作成コマンドを追加するには、アプリケーションのファイルにファイルの 種類 が関連付けられている必要があります。 ファイル名拡張子のキーの下に ShellNew サブキーを含めます。 [ファイル] メニューの [新しい] コマンドを選択すると、Shellによって [新しい] サブメニューに追加されます。 コマンドの表示文字列は、プログラムの ProgID に割り当てられている説明的な文字列になります。

ShellNew サブキーに 1 つ以上のデータ値を割り当てて、ファイルの作成方法を指定します。 使用可能な値は次のとおりです。

価値 説明
コマンド アプリケーションを実行します。 これは、実行するアプリケーションのパスを指定する REG_SZ 値です。 たとえば、ウィザードを起動するように設定できます。
データ 指定したデータを含むファイルを作成します。 データは、ファイルのデータを含む REG_BINARY 値です。 NullFile または FileName が指定されている場合、データは無視されます。
ファイル名 指定したファイルのコピーであるファイルを作成します。 FileName は REG_SZ 値であり、コピーするファイルの完全修飾パスに設定されます。
NullFile (ヌルファイル) 空のファイルを作成します。 NullFile には値が割り当てされていません。 NullFile を指定した場合、Data と FileName の値は無視されます。

 

次の図は、[ファイルの種類] と [アイコンのカスタマイズ] の例として使用される .myp ファイルの種類[新しい] サブメニューを示しています。 これで、 MyProgram アプリケーションというコマンドが追加されました。 ユーザーが [新しい] サブメニューから MyProgram アプリケーションを選択すると、Shellによって "New MyProgram Application.myp" という名前のファイルが作成され、MyProgram.exeに渡されます。

カスタムの新しいメニューのスクリーン ショット

レジストリ エントリは次のようになります。

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4