窓辺の小石 第68回 メニューがいっぱい
マウスの右ボタンを押して表示されるメニューを「コンテキストメニュー」という。右クリックメニューという言い方もあるが、必ずしも右ボタンを使うわけではないし、クリックではないこともある。コンテキストメニューは、マウスカーソルが指している対象によって切り替わる。だから「コンテキスト」メニューというわけだ。
Windowsでは、エクスプローラーが管理する「ファイルエクスプローラー」ウィンドウとデスクトップのコンテキストメニューに関しては、簡単に項目を追加する仕組みがある。なお、アプリケーションウィンドウ内のコンテキストメニューに関しては、アプリケーション自身が管理するため、ユーザーがメニューを追加する汎用の仕組みはない。
Windowsのエクスプローラーのコンテキストメニューは、レジストリを追加することで項目を追加できる。レジストリの編集ができるなら、誰でも追加は可能で、Batchファイルが作成できるなら、それを実行させることが可能だ。
エクスプローラーのコンテキストメニューは、エクスプローラーに表示できるファイルやフォルダー、ネットワークサーバーなど、さまざまなものを対象にできる。もちろん、特定の拡張子を持つファイル固有の処理も行える。
エクスプローラーにコンテキストメニューを追加するには、(表01)にあるレジストリを使う。対象ごとにレジストリキーは違うが、登録方法は同じである。shellキー(存在しなければ作る)の下にメニュー名のキーを作り、さらにその下にcommandキーを作る。そしてcommandキーの既定値に実行させるコマンドを、キー名の既定値にはコンテキストメニューに表示する名前を付ける。コマンドは、対象のパスを受け取ることが可能だ。コマンドの引数として“%V”を置けば、実行時には、これが対象パスに置換される。多くのコンテキストメニューのドキュメントに見られる“%1”や“%L”は、ファイル名だけを引き渡す変数なので、ディレクトリやフォルダーを対象にしたときにパスに変換されずコマンドがエラーになる。基本的には、これだけでコンテキストメニューが追加できる。レジストリを編集したら、エクスプローラーのウィンドウは開き直す必要がある。
■表01
具体的にエクスプローラーの空白部分(Directory\Background)に、ファイルのリストをクリップボードにコピーするコマンドを登録してみよう。レジストリエディタで、「HKEY_CLASSES_ROOT\Directory\Background\shell」開く。そこに適当に新規キーを作る(写真01)。ここでは仮に「Test」とするが、すでにshellの下にある他のキーと同じにならないようにする。Testキーの既定値に「ファイルリストのコピー」という文字列を設定する。ここでiconという名前で文字列値としてアイコンファイルやDLLへのパスを記述しておくと、追加されるメニュー項目の前にアイコンが付く。さらにTestキーの下に「command」キーを作る。その既定値に以下のコマンドを登録する(写真02)。
cmd.exe /c dir /B /A:-D-H /O:N "%V" | clip.exe
写真01: レジストリエディタで“HKEY_CLASSES_ROOT\Directory\Background\shell”の下に、“Test”というキーを作り、その既定値に表示文字列“ファイルリストのコピー”を定義する。文字列値“Icon”を定義してアイコンファイルのパスやアイコンリソースDLLのパスとリソース番号を記述すると、追加したメニュー項目の先頭にアイコンが表示される
写真02: 作成したTestキーの下にcommandキーを作り、その既定値として実行させたいコマンドを記述する。本文にあるようにこれは、エクスプローラーで表示中のフォルダー内のファイルリストをクリップボードにコピーするもの
このコマンドは、cmd.exeに内部コマンドdirを実行させ、隠し属性のないファイル名だけのリストを作る。その結果をclip.exeを使ってクリップボードに登録する。これで、エクスプローラーのファイルウィンドウ(右側のファイル一覧領域)で、何もないところで右クリックすれば、コンテキストメニューに「ファイルリストのコピー」と表示されるはずだ。
多くのアプリケーションがコンテキストメニューを使う。長期間使い続けたPCのレジストリを見ると、多数のメニュー項目が登録されていることがある。知らない間にメニューが「いっぱい」になっているかもしれない。コンテキストメニューの登録方法を理解すれば、登録を整理することも可能になる。
なお、Windows 11では、右クリックメニューを開き、さらに「その他のオプションを表示」を選んで、「クラッシック」コンテキストメニューを表示させる必要がある。あるいはアプリケーションキー(キーボード最下段の右側)や、Shift+F10でも「クラッシック」コンテキストメニューを開くこともできる。なお、そろそろ登場予定のWindows 11 Ver.22H2では、シフトキーを押しながら右クリックすると「クラッシック」コンテキストメニューが開く。
今回のタイトルの元ネタは、ハリイ・ハリスンの「人間がいっぱい」(原題:Make Room! Make Room!)である。一時、ハヤカワ文庫の表紙が1973年の映画「ソイレントグリーン」になっていた関係で 同映画の原作とされることがあるが、映画とはストーリーがまるっきり違う。強いて言えば原案というところか。原作は1966年に刊行されたが、1999年の米国の人口を3億4,400万人と予想していて、これは2020年の米国人口にほぼ等しい。刊行時の米国人口は1億9,000万だった。世界人口も1966年には34億だったが、2020年には77億と倍増。気がつかないうちに世界は「いっぱい」になっているのかも。