2011年8月28日日曜日

コンピューターアイコンに便利な機能を付ける 5

ExtendedSubCommandsKeyの使い方

前回のSubcommandsHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStoreからの参照だけなのに対して、ExtendedSubCommandsKeyは、参照先を指定できます。

参照先がHKEY_CLASSES_ROOTに変わっただけでほとんどSubcommandsと同じで併用もできますShell コマンドだけというのも同様。

…だと思います。

かなり自信がありません。参考程度にお願いします。(文末に言い訳あり)

例に挙げたものについては動作を確認しましたが、例1の他のキーは呼び出せない場合があります。例2については注意点がありますが大丈夫だと思います。

フォルダーの背景にExtendedSubCommandsKeyでメニューを追加してみます。


例1 既存のメニューを呼び出す。

フォルダーの背景にmyShell (適当な名前)キーを作成します。

HKEY_CLASSES_ROOT\directory\BackGround\shell\myShell
フォルダーの背景

ExtendedSubCommandsKey(文字列値)を作成して、DesktopBackgroundにします。

ExtendedSubCommandsKey

Window 7 のデスクトップのメニューを呼び出しています。
HKEY_CLASSES_ROOT\DesktopBackground\Shell
デスクトップのメニュー

例2 独自にメニューを設定しておく

HKEY_CLASSES_ROOT\MyTools (適当な名前)キーを作成して、Shellコマンドを設定しておきます。
フォルダー オプション を設定してみました。control folders
control folders

この時、項目のキーの(既定)かMUIVerb値で名前を設定しておかないと表示されません。
項目名が必要
MUIVerb


HKEY_CLASSES_ROOT\directory\BackGround\shell\myShell

ExtendedSubCommandsKey (文字列値)を作成して、MyToolsにします。

ExtendedSubCommandsKey
フォルダー オプション

Subcommandsのように ; (セミコロン)でメニューを並べることはできません。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MyTools\shell\FolderOption]
"Icon"="%SystemRoot%\\system32\\imageres.dll,-166"
"MUIVerb"="@%SystemRoot%\\system32\\shell32.dll,-22985"

[HKEY_CLASSES_ROOT\MyTools\shell\FolderOption\command]
@="control folders"
;
[HKEY_CLASSES_ROOT\directory\BackGround\shell\myShell]
"ExtendedSubCommandsKey"="MyTools"

2011年8月22日月曜日

コンピューターアイコンに便利な機能を付ける 4

2012年3月18日追記
内容が間違っている可能性があります!

急に動作しなくなった為、様々な環境で再確認しましたが、全く動作しないか、一部しか動作しませんでした。

申し訳ありません。

ただ、Windows.layout関係以外はちゃんと動作します。

なぜ今まで使えたのか、急に使えなくなったのか不明です。

少し言及していますが、組み合わせによって、表示されなくなったり動作しないときもあります。



2011年8月15日月曜日

コンピューターアイコンに便利な機能を付ける 3

Subcommands を使うとメニューを階層構造にできます。


全て説明するとあまりにも長くなってしまうので、ポイントだけ取り上げてみます。
基本的な、ContextMenu の追加の方法は、少しですが 当ブログ でやっているので良かったら見ていってください。


元からある、管理ツールのキーを流用しています。
HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage

Subcommands (文字列値) を追加します。
キーの既定値にデータがあると動作しないため削除します。


Manage\command キーは、Subcommands があると無視されます。元々存在する管理ツールのコマンドですので、そのままにしてあります。


Manage\shell キー以降は、通常のShellメニューと同じ構造になっています。


Subcommands を使用する場合は shell キーの既定値や、"Position"="Top" | "Position"="Bottom" で並び順が指定できませんので、管理が一番上になるように、項目の先頭に数字を付けています。

Manage\shell\01Manage\command管理ツールのコマンドは既定値が展開可能な文字列値でないと動作しません。

さらにもう一つ、ネストすることもできます。



最初の図の設定例です。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage]
@=""
"subcommands"=""

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\01Manage]
"HasLUAShield"=""
"SuppressionPolicy"=dword:4000003c
"MUIVerb"="@%systemroot%\\system32\\mycomput.dll,-400"
"SeparatorAfter"=dword:00000001

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\01Manage\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,43,00,6f,00,\
  6d,00,70,00,4d,00,67,00,6d,00,74,00,4c,00,61,00,75,00,6e,00,63,00,68,00,65,\
  00,72,00,2e,00,65,00,78,00,65,00,00,00
; %SystemRoot%\system32\CompMgmtLauncher.exe

; Device Manager

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\devmgr]
"Icon"="devmgr.dll,4"
@="@devmgr.dll,-4"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\devmgr\Command]
@="mmc.exe /s devmgmt.msc"

; Disk Management

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Diskmgmt]
@="@dmdskres.dll,-65535"
"Icon"="dmdskres.dll"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Diskmgmt\Command]
@="mmc.exe diskmgmt.msc"

; Event Viewer

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Eventvwr]
@="@miguiresource.dll,-101"
"Icon"="miguiresource.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Eventvwr\Command]
@="eventvwr.exe"

; Services

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Service]
@="@filemgmt.dll,-2204"
"Icon"="filemgmt.dll"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Service\Command]
@="mmc.exe /s services.msc"

; Task Schedule

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Taskschd]
@="@miguiresource.dll,-201"
"Icon"="miguiresource.dll,1"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Taskschd\Command]
@="mmc.exe /s taskschd.msc"


元に戻す

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage]
@=hex(2):40,00,25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,\
  00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,\
  79,00,63,00,6f,00,6d,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
  00,34,00,30,00,30,00,00,00
"subcommands"=-

[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell]

2011年8月8日月曜日

コンピューターアイコンに便利な機能を付ける 2

メニューにセパレーターを追加すると見栄えが良くなります。

コンピューターアイコンのシェルメニュー
シェルに境界線を付けるには項目のキーに値を書き込みます。

項目のに追加
項目のに追加
項目自体をセパレーターにする
"SeparatorBefore"=dword:00000001
"SeparatorAfter"=dword:00000001
"CommandFlags"=dword:00000008


前回のカスタマイズをした状態で使用例をあげてみます。

ディスクの管理にセパレーターを追加します。
HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Diskmgmt

HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Diskmgmt

項目の前にセパレーターを追加


SeparatorBefore (DWORD値) を追加して値のデータを 1 にします。

"SeparatorBefore"=dword:00000001
セパレーターを上に追加

項目の後にセパレーターを追加


SeparatorAfter (DWORD値) を追加して値のデータを 1 にします。

"SeparatorAfter"=dword:00000001
セパレーターを下に追加

項目自体をセパレーターにする

CommandFlags (DWORD値) を追加して値のデータを 8 にします。

"CommandFlags"=dword:00000008
セパレーターにする

2011年8月5日金曜日

コンピューターアイコンに便利な機能を付ける 1.2

大雑把で恐縮ですがカスタマイズした内容の説明です。

HKEY_CLASSES_ROOT\CLSID\ 以下のキーのほとんどは、Windows7の標準では編集できなくなっていますが、例外として

コンピューター アイコンの右クリックメニュー
{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell
ごみ箱 アイコンの右クリックメニュー
{645FF040-5081-101B-9F08-00AA002F954E}\shellshellex

などのごく一部はそのまま編集可能になっています。


これは、この部分に機能を追加する多くのアプリケーションとの互換性を考慮したものと思われます。
前々回にこの部分を使用したのも、煩わしい所有権の変更をする必要がないためです。(Findは見落としていましたが)

CLSIDについては、一部ですが、MSDN などに載っていますし、キーの既定値からおおよそ推測したりできます。

ShellDevmgrDiskmgmt キーなどは、好きな名前にできます。

HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell

右クリックメニューがこの順番で並びますので、a ,b ,c や 01 ,02 ,03 と付けてみるのもいいかもしれません。
任意の順で並べ替えることもできますが、ここでは割愛します。

Devmgrキーなどの 既定値のデータが実際に表示される名前になります。

HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Devmgr

@devmgr.dll,-4 でDLLの中の文字列 (デバイス マネージャー)を指定しています。
リソースツールなどで日本語の文字列を探す場合は、devmgr.dll.mui を調べます。
日本語で「デバイス マネージャー」と入力しても同じ結果になります。
MUIVerb 値を追加するとそちらが優先して表示されます。

MUIVerb

Icon 値でメニューのアイコンを指定しています。
DLLの中の文字列やアイコンは、リソースツールなどで調べることもできますが、ほとんどは、Windows が初めから設定している、スタートメニューやレジストリを参考にしています。

例えば、デバイス マネージャーは以下のキーで設定されていますので、それを参考にしました。
HKCR\CLSID\{74246bfc-4c96-11d0-abef-0020af6b0b7a}

Command キーの既定値のデータが実行されるコマンドです。

Command

%SystemRoot%\system32\NOTEPAD.EXEなどにするとメモ帳が起動します。

この、Command キーの既定値や上のデバイスマネージャーの文字表示のところは、通常は文字列値 (REG_SZ)ではなく、展開可能な文字列値 (REG_EXPAND_SZ)になっています。

ブログに載せるのに都合が悪いので文字列値にしていますが、管理ツールなど、展開可能な文字列値 でないと動作しないものもあります。

2011年8月3日水曜日

コンピューターアイコンに便利な機能を付ける 1.1

前回の投稿は、findキーの所有者が TrustedInstaller になっているため、検索のみ登録されませんでした。失礼いたしました。

C:\Shell.reg をインポートできません。データの一部をレジストリに書き込むことができませんでした。システムまたはその他のプロセスによって、開かれているキーがあります。


でもこれおかしいんですよね。

趣味でやっているブログですが、あまりいい加減なことも書けないので、バーチャルマシン → 実機 で少なくとも2回は確認していますが、その時は問題ありませんでした。

再度、調べていたら、レジストリエディタ か Windows なのか判断できませんが、ちょっと変な挙動に気がつきました。

色々な環境での、前回のregファイルの挙動
1. 初回実行でエラーなし findキー以下は未登録。2回目実行でエラー。
2. 他の環境で初回実行でもエラー。

色々な環境での、Shellキーを削除の挙動
1. エラー表示で削除不可。
2. エラー表示後、Shellキーより下のエントリを全て削除。
3. Shellキー が削除される。
4. 他のレジストリエディタで削除不可。

前回の投稿は直前に、このShellキーの削除の挙動に気がついて書き直したため、バックアップを取っていながら、それを使用していないという変な内容になってしまいました。

下書きで書いた、元に戻す方法は

Shellキーを削除(キー自体は削除されない) → バックアップしたregファイルを実行 です。

今回のエラーの報告のために前回の投稿はそのままにしてあります。

Find(検索)の部分を削除するか、少し難しいですが、レジストリキーのフルコントロール権限を、Administrators に与えてもらうと、エラーも出なくなります。

1. キーの所有者TrustedInstaller から Administrators に変更。
(アクセス許可 → 詳細設定)

2. Administratorsフルコントロールにする。

アクセス権をTrustedInstallerに戻すには

2011年8月1日月曜日

コンピューターアイコンに便利な機能を付ける 1

デスクトップのコンピューター アイコンにメニューを追加してみました。

コンピューター アイコンにメニューを追加

基本的になんでも追加できますが、今回は管理ツールの中でよく使う、イベントビューア、サービス、タスク スケジューラ、ディスクの管理、デバイスマネージャー です。


HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell
キーをバックアップ。

HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell


必要な機能を編集で取捨選択して、regファイルを実行。

Windows Registry Editor Version 5.00

; Find

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\find]
"LegacyDisable"=-
"Icon"="SearchFolder.dll"

; Disk Management

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Diskmgmt]
@="@dmdskres.dll,-65535"
"Icon"="dmdskres.dll"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Diskmgmt\Command]
@="mmc.exe diskmgmt.msc"

; Device Manager

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\devmgr]
@="@devmgr.dll,-4"
"Icon"="devmgr.dll,4"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\devmgr\Command]
@="mmc.exe /s devmgmt.msc"

; Event Viewer

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Eventvwr]
@="@miguiresource.dll,-101"
"Icon"="miguiresource.dll,0"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Eventvwr\Command]
@="eventvwr.exe"

; Services

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Service]
@="@filemgmt.dll,-2204"
"Icon"="filemgmt.dll"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Service\Command]
@="mmc.exe /s services.msc"

; Task Schedule

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Taskschd]
@="@miguiresource.dll,-201"
"Icon"="miguiresource.dll,1"

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Taskschd\Command]
@="mmc.exe /s taskschd.msc"


元にもどす

Windows Registry Editor Version 5.00

; Find

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\find]
"LegacyDisable"=""
"Icon"=-
; Disk Management
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Diskmgmt]
; Device Manager
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\devmgr]
; Event Viewer
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Eventvwr]
; Services
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Service]
; Task Schedule
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Taskschd]