(解説)コンテキストメニューのレジストリについて
ここで少し技術的な話を書くことにします。IEのコンテキストメニューの仕組みについて、この章では説明を行います。
まず、レジストリという用語について解説しておきます。
レジストリ エディタを起動して、レジストリがどのような物かを見てみたい人は、以下の手順でレジストリ エディタを起動してください。
- Windowsの[スタート]ボタンをクリックする。
- [ファイル名を指定して実行]を選ぶ。
- 起動したダイアログのテキスト入力欄に「regedit」と入力して[OK]ボタンをクリックする。
- レジストリ エディタのウィンドウが表示される。
IEのコンテキストメニューの「各メニュー項目」は、レジストリの「HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\」というパスに登録されている「各キー」に対応しています。そして、メニューが選択された場合は、そのキーの(標準)の値に登録されているパス(HTMLファイルのパス)が実行されます。
| 値 | データ |
(標準) |
実行されるHTMLファイルのパス |
メニューが選ばれたとき、選択したメニューに対応したHTMLファイルがIEで開かれます。その際、2つの点で、通常のHTMLファイルをIEで開くときとは違う振るまいをします。
1つ目の違う点は、「コンテキストメニューを開いた元のWebページの情報」を、操作できる状態で起動することです。この操作は、開かれたHTMLファイルのプログラム内でexternal.menuArgumentsというオブジェクトを通して行うことができます。
2つ目の違う点は、通常とは違うウィンドウの状態で起動することです。コンテキストメニューから起動させるHTMLファイルは、レジストリの設定によって、「ウィンドウを表示させない」か、「固定サイズのウィンドウとして表示させる」かの、いずれかの状態で起動します。通常のWebブラウザの見た目では起動しません。
さて、このウィンドウ表示の設定は、レジストリ内ではflagsの値として登録することになります。このflagsのデータが0の場合はウィンドウを非表示、1の場合はウィンドウを表示となります。
| 値 | データ |
flags |
ウィンドウの表示フラグ |
| データ | 内容 |
| 0 | ウィンドウを非表示 |
| 1 | 固定サイズウィンドウを表示 |
レジストリの値にはflags以外にもう1つあるのですが、その説明の前に、コンテキストメニューのレジストリがどのようになっているかを示すことにします。
今回作成する「コンテキストメニュー用ソフト」の、ソフト名は「選択範囲のソースを表示&削除&書き換え」です。このソフトをIEに登録する場合は、次のようなレジストリのパスになります。また、その下に、2つの値と、そのデータのサンプルを【 】でくくって書くことにします。
- HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\選択範囲のソースを表示&削除&書き換え
- (標準) 【C:\CodeZineSample\source_view.html】
- contexts 【127】
- flags 【1】
この場合、コンテキストメニューには「選択範囲のソースを表示&削除&書き換え」と表示されるようになります。上記の(標準)とflagsは既に説明しましたので、contextsについて、説明します。
contextsは、コンテキストメニューに表示させる条件を指定するための値です。例えば、今回のサンプルのように、選択範囲に対して処理を行うソフトの場合を考えてみます。その際、選択範囲以外の場所でメニューに名前が表示されていても役に立ちません。また、役に立たないばかりか、邪魔になる可能性もあります。こういったことがあるために、どういった条件のときに、そのソフトをコンテキストメニューに表示させるかの条件が設定できるようになっています。
| 値 | データ |
contexts |
メニューへの表示条件 |
コンテキストメニューに表示させる条件には、以下の7種類があります。複数の条件で表示させたい場合は、それぞれの条件の数値を足していきます。すべての条件で表示させたい場合は、すべての数値の合計である127を指定します。
| データ | 内容 |
| 1(0x00000001) | 通常の場所(CONTEXT_MENU_DEFAULT) |
| 2(0x00000010) | 画像の上(CONTEXT_MENU_IMAGE) |
| 4(0x00000100) | フォームのコントロール上(CONTEXT_MENU_CONTROL) |
| 8(0x00001000) | テーブルの上(CONTEXT_MENU_TABLE) |
| 16(0x00010000) | 選択されたテキストの上(CONTEXT_MENU_TEXTSELECT) |
| 32(0x00100000) | リンクの上(CONTEXT_MENU_ANCHOR) |
| 64(0x01000000) | その他(CONTEXT_MENU_UNKNOWN) |
「コンテキストメニュー・インストーラ」では、これらのキーや値のうち、「追加するHTMLファイルの名前(source_view.html)」「メニューへの表示名(選択範囲のソースを表示&削除&書き換え)」「flags(1)」「contexts(16)」を、ユーザー変数として指定し、レジストリへの登録を行うことにします。

