2014年6月4日水曜日

デスクトップのシェルメニューをサブメニューにする

Windows の右クリックメニューをカスケード表示し 1つにまとめる方法です。デスクトップを例にしますが、ほかのシェルメニューにも応用できます。

cascade desktop menu

デスクトップとフォルダーの背景にメニューが出ます。

HKEY_CURRENT_USER を使うため、アクセス権の変更は不要。レジストリの ExtendedSubCommandsKey を応用して、至って簡単にカスタマイズできます。

カスケード メニューを追加

  1. レジストリのキーを作成します。Subject のところは任意の名前です。

    HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\Subject

  2. Subject キーに ExtendedSubCommandsKey(文字列値) を作成して、値のデータを、DesktopBackground にします。

    ExtendedSubCommandsKey

たったこれだけの手順で完成。ちゃんと動作します。

お好みでメニューの表示を装飾します

Subject キーを開きます。

(既定)themecpl.dll,-1 にします。メニューに個人設定と表示されます。

Icon(文字列値) を作成して、値のデータを display.dll にします。
メニューにアイコンが表示されます。

Position(文字列値) を作成して、値のデータを Bottom にします。

Directory\Background\shell\Subject ExtendedSubCommandsKey Icon Position value

これらの値のデータは任意です。元のデスクトップのメニューが参考になります。

HKLM\SOFTWARE\Classes\DesktopBackground\Shell\Personalize

元からあるデスクトップのメニューを非表示にする

HKCU のキーに LegacyDisable を書き込み無効にする方法が安全で簡単です。

HKEY_CURRENT_USER\Software\Classes\DesktopBackground\Shell に、Display ,Gadgets ,Personalize キーを作成して、各々に、LegacyDisable (文字列値)を追加します。

DesktopBackground LegacyDisable

参照元を非表示にしても、メニューの表示は有効です。

元に戻す

すべて HKCU に追加する形でカスタマイズしましたので、今回追加したキーや値を削除すれば簡単に元に戻ります。

カスタマイズは簡単ですが、理屈は難しいです。
ポイントは、Subjectキーに設定した ExtendedSubCommandsKey の使い方の一点です。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\Subject]
"ExtendedSubCommandsKey"="DesktopBackground"
"Icon"="display.dll"
"Position"="Bottom"
@="@themecpl.dll,-1"

; hide original desktop background menu
[HKEY_CURRENT_USER\Software\Classes\DesktopBackground\Shell\Display]
"LegacyDisable"=""

[HKEY_CURRENT_USER\Software\Classes\DesktopBackground\Shell\Gadgets]
"LegacyDisable"=""

[HKEY_CURRENT_USER\Software\Classes\DesktopBackground\Shell\Personalize]
"LegacyDisable"=""

以前に紹介したSubcommandsと今回のExtendedSubCommandsKeyはカスケードメニューに使える便利なオプションです。