このページの本文へ

前へ 1 2 次へ

Windows Info 第35回

エクスプローラーの右クリックメニューをカスタマイズする

2014年11月20日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 Windowsの右クリックメニューは、コンテキストメニューとも呼ばれ、クリックする場所によってメニュー内容が変化するように作られている。実際にはクリックされた場所にあるアプリケーションやWindowsがメニューを出す仕組みなので、アプリケーションによってはメニューが表示されないこともある。右クリックメニューを出すのか、何をだすのかはアプリケーションが決定しているのである。

エクスプローラーの右クリックメニューはユーザーによってカスタマイズも可能だ

エクスプローラーで表示できる
右クリックメニューはカスタマイズできる

 利用頻度の高いエクスプローラーの場合、扱う対象がファイルやフォルダなどのファイルシステム関連のものであるため、ファイルやフォルダといった種類や、ファイルタイプなどによって、右クリックメニューに表示される項目を制御することが可能だ。

 エクスプローラーはWindowsでは「シェル」と呼ばれる中核をなすプログラムだ。単独のプログラムでありながら、Windowsの一部といってもいいほど、深くWindowsと関係している。たとえば、デスクトップやタスクバー、スタートメニュー、スタート画面もエクスプローラーが関わっている。このため、ファイルシステム関連のものにコンテキストメニューに関する設定を行うことで、エクスプローラー内に表示される右クリックメニューに項目を追加することが可能になる。

 この設定はレジストリで行なう。レジストリの「HKEY_CLASSES_ROOT」以下にある拡張子をキーとする項目(ピリオドで始まるキー)やExefile(実行ファイル)やFolder(フォルダ)などのキーを持つ項目に設定を行うことで、エクスプローラー(デスクトップを含む)内でオブジェクトや背景(Background)を右クリックしたときに表示されるコンテキストメニューに項目を追加できる。

 項目はいくつも追加可能で、複数の方法があるが、ここでは、COMコンポーネントを追加する方法(Visual Studioなどによる開発が必要)は解説せず、直接実行ファイルやコマンドを記述できる方法のみを解説する。

 対象となる場所、オブジェクトとレジストリーキーの対応は下の表のようなものになる。たとえば、フォルダに対して右クリックキー項目を追加したい場合「HKEY_CLASSES_ROOT\Folder\Shell」に追加したいコマンドに対応するキーを登録する(記述方法は後述)。

場所/対象 レジストリキー 備考
特定のファイル(拡張子) HKEY_CLASSES_ROOT\拡張子 特定の拡張子(.txtなどのようにピリオドで始まるキー)
ショートカット(.lnk) HKEY_CLASSES_ROOT\.lnk 拡張子.lnkの設定は無効
実行ファイル(exeファイル) HKEY_CLASSES_ROOT\exefile exeファイルのみ
任意のファイル(*) HKEY_CLASSES_ROOT\* 拡張子キーに登録がないファイルすべて
フォルダ HKEY_CLASSES_ROOT\Folder コントロールパネルやネットワークなどの特殊フォルダを含む
ディレクトリ HKEY_CLASSES_ROOT\Directory ファイルフォルダ/ディレクトリ(特殊フォルダは含まない)
ドライブ HKEY_CLASSES_ROOT\Drive ドライブはフォルダの1種になる
デスクトップ HKEY_CLASSES_ROOT\DesktopBackground デスクトップの何もない部分
すべてのオブジェクト HKEY_CLASSES_ROOT\AllFilesystemObjects エクスプローラーに表示されるすべてのオブジェクト(優先順位低)
ファイルウィンドウの何もないところ HKEY_CLASSES_ROOT\Directory\Background エクスプローラー内でのみ有効
ネットワークの共有名 HKEY_CLASSES_ROOT\Network ネットワークの共有名のところ
ネットワークサーバー HKEY_CLASSES_ROOT\NetServer ネットワークサーバーアイコンの上

 ただし、それぞれのレジストリキーで効果が及ぶ対象が違い、キーによっては複数のオブジェクトが対象になり、さらに、各設定には優先度があって、上位のキーが設定されていると、下位のキーによる設定がコンテキストメニューに表示されないといったことが起こる。

 この設定自体はWindows初期からある機能で、Windowsの進化と共にエクスプローラーで表示できるオブジェクトが変化してきたことによる結果だ。たとえば、Windows 95からは、フォルダの概念が導入され、記憶装置上のディレクトリと特殊フォルダ(ネットワーク、コントロールパネル、Vistaのライブラリなど)を合わせて「フォルダ」と総称するようになった。このため、レジストリ設定には、MS-DOSのディレクトリを対象とする「Directory」というキーと、95以後のフォルダを対象とする「Folder」というキーがある。

 Folderキーにメニュー項目が追加されていないと、Directoryキーの設定が有効になって、ここに設定したメニュー項目が表示されるが、Folderキー側でコンテキストメニュー項目を設定してしまうと、Directoryキー側の項目は表示されなくなってしまう。

 同様にすべてのファイルを表す「*」キーや、すべてのオブジェクトを表す「AllFileSystemObjects」キーのように対象が広く、他の場所を含む登録場所もある。もし、複数の場所で同一のキー名でメニューが追加された場合、Windowsが決める優先順位で表示されるメニュー項目が決定する。

場所/対象 略号 右クリック対象物
ft ex xe * sv sh dr sf※1 di lk※2 dt bk
拡張子キー(関連づけなし) ft                      
拡張子キー(関連づけあり) ex   ※3                    
実行ファイル(Exefile) xe                      
任意のファイル(*) *                
ネットワークサーバー(NetServer) sv                      
共有名(Network) sh                      
ドライブ(Drive) dr                      
フォルダ(Folder)              
ディレクトリ(Directory) di                    
すべてのオブジェクト(AllFileSystemObjects) al     ※4    
デスクトップ(Desktop) dt                      
ファイルウィンドウの何もないところ(Directory\Background) bk                    

○:Windows 7/8で有効、7:8.1では無効、↑:上位の項目が設定されていなければ表示される
※1:sf=特殊フォルダ、※2:ショートカット、※3:「開く」項目の代わりに表示される(他の設定がないとき)、※4:ライブラリ、コントロールパネルなどの一部の特殊フォルダのみ

 たとえば、Folder(HKEY_CLASSES_ROOT\Folderのこと)は、対象として特殊フォルダとファイルフォルダ(MS-DOSでいうディレクトリ)を含む。ここにコンテキストメニュー項目を登録したとき、同じ名前のキーをDirectoryに登録してもメニュー項目は表示されない。キー名が違っていれば、対象がファイルフォルダーならメニュー項目が表示される。

 また、Folder側に登録したメニュー項目を削除するとDirectory側に登録したメニュー項目が表示されるようになる。このため、同一のコマンドを対象によって切り替えたい場合には、同じキーを使い、違うコマンドの場合には、別のキーを使って、対象上で右クリックしたら常に表示するといった制御が可能だ。

 また、Windowsのバージョンによっても少し動作が違う。本連載で対象にしているのは基本的にWindows 7とWindows 8.1だが、たとえば、ショートカットファイルに対応ずる「.lnk」の拡張子キーは、7以後のWindowsでは無効になっている。また、個々の「拡張子」に対して「右クリック」メニューを追加する方法のうち、今回解説する「shell」キーを使う方法は、Windows 8.1では無効だが、COMコンポーネントによるContexMenuHandlerを登録する方法は有効なようだ。

 shellキーを使うコンテキストメニューの登録は、古いやり方なので、マイクロソフトとしては、段階的に排除しているのかもしれない。ただ、Windows 7や8.1以前に開発されたアプリケーションでは、この方法を使っているものも少なくないため、shellキーを使う方法自体は当面残ると思われる。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン