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"=""