こんにちは、阿久津です。予告したように前回の記事で紹介したレジストリチューニングの解説から取りかかりましょう。まずは、HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ emptyキーの内容をご覧ください。同キーには、4つの文字列値を作成しました(図01~02)。

図01: HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ emptyキーの内容

図02: HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ empty \ commandキーの内容

最初の文字列値「CommandStateHandler」は、文字どおりコマンドの状態を参照するものですが、データ値となる「{c9298eef-69dd-4cdd-b153-bdbc38486781}」は、ごみ箱の状態を通知するためのクラスIDを参照しています。「Description」「Icon」「MUIVerb」と3つの文字列値は、「%SystemRoot%\System32\shell32.dll」ファイルに含まれるリソースを参照し、それぞれ文字列とアイコンを取得するというもの。

そして、HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ empty \ commandキーにある文字列値「DelegateExecute」は、文字どおりエントリが参照されたときに実行するコマンド。shellキーを用いた機能拡張では、通常「(既定)」のデータ値にコマンドを入力しますが、代理実行するコマンドとして同エントリを使用し、ごみ箱を空にするアクションを実行するためのクラスID「{48527bb3-e8de-450b-8910-8c4099cb8624}」を呼び出しています。

つまり、文字列値「CommandStateHandler」で状態をチェックし、文字列値「DelegateExecute」で、ごみ箱を空にするアクションを実行するという仕組みでした。このレジストリチューニングの種明かしをしますと、ごみ箱アイコンに対する設定情報を格納する、HKEY_CLASSES_ROOT \ CLSID \ {645FF040-5081-101B-9F08-00AA002F954E} \ shellキーの内容を拝借しています。同キーをご覧になるとわかるように、前回作成したレジストリチューニングと同じエントリが並んでいることを確認できるでしょう(図03)。

図03: HKEY_CLASSES_ROOT \ CLSID \ {645FF040-5081-101B-9F08-00AA002F954E} \ shell \ emptyキーの内容

さて、コンテキストメニューに項目を追加する今回のレジストリチューニングでは、もう一つ追加可能なエントリが残されています。まずは下記手順をお試しください。

1.[Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
2.レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ emptyキーまでたどって開きます。
3.右ペインの何もないところを右クリックし、メニューから<新規>→<文字列値>と選択します。
4.エントリ名を「Position」に変更したら、ダブルクリックします。
5.ダイアログが起動したら、値のデータに「Bottom」と入力して<OK>ボタンをクリックします。
6.[F5]キーを押して変更内容をシステムに反映させてから、レジストリエディターを終了します。

これでチューニング終了です(図04~09)。

図04: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図05: レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ emptyキーまでたどって開きます

図06: 右ペインの何もないところを右クリックし、メニューから<新規>→<文字列値>と選択します

図07: 文字列値「新しい値 #1」の名称を「Position」に変更します

図08: 文字列値「Position」をダブルクリックで開き、値のデータに「Bottom」と入力して<OK>ボタンをクリックします

図09: あとは[F5]キーを押して変更内容をシステムに反映させてから、レジストリエディターを終了します

それでは結果を確認するため、デスクトップの何もないところを右クリックしてください。するとコンテキストメニューに表示される<ごみ箱を空にする>はメニュー下部に移動しました。このように文字列値「Position」は、項目の表示位置を調整することが可能なのです。また、同文字列値のデータ値を「Top」に変更すれば項目は上部に表示されますが、中心部を示す「Middle」に変更すると文字列値「Position」を作成していない状態と同じく中心部に表示されました(図10~12)。

図10: 文字列値「Position」のデータ値が「Bottom」の状態

図11: 文字列値「Position」のデータ値が「Top」の状態

図12: 文字列値「Position」のデータ値が「Middle」の状態

なお、前回の手順は執筆している筆者でも、少々煩雑に感じましたので、読者はより大変だったことでしょう。そこで、今回は同チューニングを行なう「ContextMenu-RecycleBin-Enable.reg」、同チューニングを無効にする「ContextMenu-RecycleBin-Disable.reg」と、2つのレジストリファイルを用意しました。コンテキストメニューに対するレジストリチューニングは、同メニューを表示する際にエントリを参照する仕組みのため、瞬時に反映されます(図13~14)。

ContextMenu-RecycleBin-Enable.zip
ContextMenu-RecycleBin-Disable.zip

図13: 用途に合わせたレジストリファイルをダブルクリックし、確認をうながすダイアログが起動したら、<はい>ボタンをクリックします

図14: 結果を示すダイアログが起動したら、<OK>ボタンをクリックしてください。これでコンテキストメニューの項目が追加(もしくは削除)されます

お気に入りのアプリケーションを起動する

それでは、応用例をいくつか紹介しましょう。最初はコンテキストメニューにお気に入りのアプリケーションを起動するレジストリチューニングです。こちらのロジックは簡単で、HKEY_CLASSES_ROOT \ Directory \ Background \ shellキーに任意の名称でサブキーを作成し、さらにサブキーとして「command」を作成。前者のキーでは「(既定)」のデータ値に項目名。文字列値「Icon」のデータ値にアイコンリソースを指定。文字列値「Position」は好みに応じて作成します。

後者の「command」キーでは、「(既定)」に実行するコマンドを指定しましょう。この際、環境変数を用いると正しくプログラムが起動しない可能性がありますので、絶対パスで記述してください。なお、詳細手順は割愛します。必要であれば前回の記事を参考にしてください。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\WMP]
@="Windows Media Player"
"Icon"="C:\\Program Files\\Windows Media Player\\wmplayer.exe,0"
"Position"="Bottom"

[HKEY_CLASSES_ROOT\Directory\Background\shell\WMP\command]
@="C:\\Program Files\\Windows Media Player\\wmplayer.exe"

このレジストリチューニングを行ないますと、コンテキストメニューに「Windows Media Player」という項目が追加されます。起動するアプリケーションによって各データ値を変更し、お好みのアプリケーションを追加してください(図15~17)。

図15: HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ WMPキーの内容

図16: HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ WMP \ commandキーの内容

図17: コンテキストメニューに<Windows Media Player>が追加されました

Windows 7の機能を追加する

今度は、HKEY_CLASSES_ROOT \ Directory \ Background \ shellex \ ContextMenuHandlersキーに対してレジストリチューニングを行ないましょう。Windows 7が備える内部的な機能は、その多くがクラスIDで管理されています。例えば「ファイル名を指定して実行」はクラスID「{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}」ですが、同機能を直接呼び出す項目を作成してみましょう。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\{2559A1F3-21D7-11D4-BDAF-00C04F60B9F0}]

このクラスIDを同キーに作成することで、コンテキストメニューには<ファイル名を指定して実行>が加わります(図18~19)。

図18: HKEY_CLASSES_ROOT \ Directory \ Background \ shellex \ ContextMenuHandlersキーに、サブキーとして「{2559A1F3-21D7-11D4-BDAF-00C04F60B9F0}」を作成します

図19: これでコンテキストメニューに<ファイル名を指定して実行>が加わりました

今度は先ほど作成したキー名を「{2559A1F0-21D7-11D4-BDAF-00C04F60B9F0}」に変更してみましょう。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\{2559A1F0-21D7-11D4-BDAF-00C04F60B9F0}]

この場合はコンテキストメニューに<検索>が加わり、同機能を呼び出すことが可能になります。このようにContextMenuHandlersを用いる場合、シンプルかつ簡単なチューニングで機能(項目)を追加することが可能ですが、shellキーを対象にしたジストリチューニングで行なった名称やアイコンの指定といった柔軟なカスタマイズは実行できません(図20~21)。

図20: HKEY_CLASSES_ROOT \ Directory \ Background \ shellex \ ContextMenuHandlersキーに、サブキーとして「{2559A1F0-21D7-11D4-BDAF-00C04F60B9F0}」を作成します

図21: これでコンテキストメニューに<検索>が加わりました

コンテキストメニューを活用するレジストリチューニングは、アイディア次第で確実に広がります。本連載でも機会を見てご紹介しますが、面白いアイディアがありましたら、筆者のWebページに設置したメールフォームからご連絡ください。

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)