エクスプローラー(Windows7)のコマンドバーにボタンを追加する

東日本大震災の影響で Internet Explorer 9の日本語版リリースが延期されましたね。インターネット上のトラフィックが増えることによる影響を考慮してのことでしょうか。しょうがないですね。

さて、本題です。
(※注)かなり長文になります。間違い・勘違いがあると思うので、随時修正が入るかと思います。すみません。

Windows7のエクスプローラはXPのものとは違って、メニュー/ツールバーがデフォルトで非表示になってますね。その替わりにWindows7のエクスプローラには新しくコマンドバーっていうのがウィンドウの上部がついてます。

コマンドバー

正式名は確認してませんが・・・(たぶんコマンドバーで合ってるはず)、このコマンドバーを自由にカスタマイズできるツールがWindowsに標準ではありません。サードパーティー用にわざとそういうカスタマイズできる設定を提供しなかったのか、それとも、マイクロソフトはこのユーザーインターフェイスをあまりいじって欲しくないのか、理由は分かりませんが、カスタマイズできればそれに越したことはありません。

僕はここに、【コマンドプロンプト】ボタンを追加できれば・・・というのが今回の備忘録を書くきっかけです。

で、ググって見ると、検索ワードの指定が駄目なのか、日本語での情報が見つかりません。英語で探してみると、ドンピシャのハウツーが公開されていました。ネタ元は・・・

  • http://www.experts-exchange.com/Programming/System/Windows__Programming/A_2173-Add-a-Custom-Command-Button-to-the-Windows-7-Explorer-Toolbar.html

英語なので読みにくいし・・・で、自分用の備忘録用に書いとく。

【Part 1】コマンドバーにファイルを選択したら「削除」・「切り取り」ボタンが欲しい!

削除ボタンは欲しい。選択してから、キーボードのDeleteキー押すとか、右クリックして削除を選択とか、整理ボタンをクリックして削除とか・・・メンドクサイんだよ(゚д゚) XPみたいにツールバーからワンクリックでやりたいんだよ!!! というわけで、削除と切り取りボタンを付けましょう。

本当はそれ用のツールを作ればいいんだけど、単なるレジストリ操作なので・・・というか、探せばもう既に誰かやってるはず。お知りの方はぜひ教えてください。

【重要】 一応、レジストリをいじるので、レジストリって何? っていう人は絶対実行しないでください。またレジストリをいじってWindowsが起動しなくなった等、当方は一切責任持てません。あしからず。

●ステップ1

レジストリエディタ(要権限昇格)を立ち上げ、以下のキーへ。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}

その中に文字列で CannonicalName が “Generic” であることを確認する。これはおそらく通常のディレクトリ・フォルダ(一般項目)、っていう意味だと思う。FolderTypes キー の中にいろいろありますが、これらはエクスプローラ・ネームスペース上のフォルダの種類(ライブラリとかコントロールパネルとか・・・)毎にGUIDが割り当てられ、表示する際の設定がいろいろ入っているようです。

registory_editor

●ステップ2

上記のキーには、どういうわけか、Administrators権限で読込しか許可されていません。まずこのキーのアクセス許可を得ます。具体的には、上記キーを右クリックし、【アクセス許可】を選択 → 【詳細設定】 → 【所有者】のタブを開きます。

ここで、「Administrators」をクリックし、【適用】ボタンを押して所有者を変更します。デフォルトで「Trusted Installer」 になっていると思います。

registory_editor2

変更したら【アクセス許可】ダイアログへ戻り、Administrators へ フルアクセスのチェックを入れます。

これで、前準備完了。

●ステップ3

フォルダー内のアイテムを選択した場合にのみ、「削除」「切り取り」ボタンを表示させたいので、Step1で確認したキーにサブキーを作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksItemsSelected

そのデフォルトキーに、下記値を設定します。

Windows.delete;Windows.cut

registory_editor3
で、この値はなんなのか・・・というと、下記キーに列挙されているサブキーの名前のようです。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell

もし、「コピー」ボタンも追加したければ、Windows.delete;Windows.cut;Windows.copy のようにセミコロンでくっつければいいようです。

これで下記画像のように即座に反映されてます。(フォルダー内のアイテムを選択するたびにレジストリキーを確認しているんじゃないかな~?)

フォルダ

と、ここまで記事を書いて、もしかして 「Windows7 ツールバー カスタマイズ」 で検索すればいいんじゃないか?と気付いて検索したら・・・アタリでした(トホホ・・・)orz

↓に詳細に解説されてますね(^^;;;
http://journal.mycom.co.jp/column/windows/114/index.html
http://journal.mycom.co.jp/column/windows/115/index.html

まぁ、いいや、自分用の備忘録なので置いとこ。
実は、下記の【Part2】が本当にやりたかったことです・・・と言い訳です。(^^;;;

【Part2】 コマンドバーに「コマンドプロンプト」ボタンが欲しい!!!

以前からフォルダからカンタンにコマンドプロンプトを開くことができるツール(StExBar)を使っています。Windows7でも動作するようになってますが、基本XPのツールなのでXPスタイルのツールボタンなんでカッコ悪いです。

そこで、フォルダウィンドウ内で子アイテムが何も選択されていないときは、「コマンドプロンプト」ボタンを表示させ、ボタンを押すとそのフォルダのディレクトリでコマンドプロンプトが開くようにできれば・・・というのが今回の本当の動機です。

仕組み自体は【Part 1】と同じです。

【Part 1】では、予めエクスプローラが用意したコマンドボタンしか追加できません。上記、CommandStore に自由にコマンドを追加できるんでしょうか? よく分かりませんが、別の方法で好きなボタンを追加できるようです。

同じくアクセス許可を与えないといけませんが、【Part 1】で既にアクセス許可などは与えていますので、Step1/Step2は省略します。

【Part 1】では、子アイテムが選択されたときに表示されるコマンドボタンを追加しました。今回は、何も選択されないときに表示されるユーザー定義のコマンドボタンです。

●Step 3

今度は、【Part 1】で確認したレジストリキーに、以下のサブキーを新たに作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected

作成したサブキーの中にさらにサブキーを作ります。

0

TasksNoItemsSelected のサブキーは、0,1,2,3・・・と追加するコマンドボタンの数によって0から順番につけていけばいいようです。

上記数字のサブキーの中にさらにサブキーを作りますが、今度はGUIDを指定しなければなりません。ユーザー定義のコマンドボタン毎にGUIDが必要です。Windowsには標準でこのGUIDを得るツールが入っていないので、マイクロソフトからダウンロードします。

GUID Generator
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=94551F58-484F-4A8C-BB39-ADB270833AFC&displaylang=en
※WindowsSDKにも同梱されているので、VIsual Studioとか入っている人はすでにインストールされているはず。

自己解凍書庫となってますので、解凍して、実行すると以下のようなウィンドウが出ます。

GUIDGEN

GUID Format で 【4.Registry Format】 を選択して【COPY】ボタンを押すと、カンタンにGUIDがクリップボードに得られます。起動時にすでに作成されてますので、複数のGUIDを作る必要がある場合のみ 【New GUID】ボタンを押して再び【COPY】ボタンを押すといいでしょう。

クリップボードにコピーした値を使用して、上記で作成した’0’キーの中でサブキーを作成します。下記画像のようになりますが、下の画像のGUID値は実際に上記GUID生成ツールを使って得られた値ですので、下記画像と同じ値を入力しないように。かならず、各自のパソコン上でGUIDを生成してください。

で、上の画像にもあるように、GUIDのキーに、文字列を設定します。「InfoTip」はコマンドバーボタンにマウスを置いたときに表示されるツールチップのテキスト。「Title」は、コマンドバーボタンのボタン名です。ここの場合は、「コマンドプロンプト」としました。他にも Icon とか設定できるキーがあるようですが、別になくてもいいので二つだけにします。

次に・・・またGUIDキーの下に3つ連続してサブキーを作っていきます。

Shell
Shell\InvokeTask
Shell\InvokeTask\Command

途中のShell,InvokTaskはキーをつくるだけで結構です。Commandキーの既定値に実行するコマンドラインを入力します。
今回の場合は、コマンドプロンプトですから、以下のように入力しました。

cmd.exe "/k @ver && @echo Copyright (c) 2009 Microsoft Corporation.  All rights reserved. && @title コマンドプロンプト && @cd /D %*"

エクスプローラからは”%*” のところに引数が渡されます。実際には、開いているフォルダのディレクトリパスが渡されます。フォルダー内の子アイテム(ファイル)が選択されていれば、選択されているファイルのパスも列挙されますが、今回は何も選択されていない時に表示するコマンドバーボタンを追加するので、開いているフォルダのディレクトリパスだけが渡されます。上記コマンドラインの説明は省きますが、単にコマンドプロンプトを起ち上げ、カレントディレクトリをエクスプローラから渡されたディレクトリパスに変更しているだけです。

最終的には以下のレイアウトになります。何度も書きますが、画像の87D42…のGUID部分は、GUID生成ツールで作成したものですので使用するPCで作成したものを入力すること。

レジストリエディタ・タスク2

ここまで来たら、すでにフォルダウィンドウを開いた状態で下記のようなってるはずです。

フォルダ2

こんな感じで、複数のコマンドバーボタンを作りたいときは、1,2,3,・・・とキーを増やせば・・・いいはず? 実際やってないので分かんないですが、あまり多くボタンを作ると逆にフォルダウィンドウの動作が重くなりそうな感じ。

注意点が一つ。エクスプローラはフォルダの中身(ファイル)から判断して、自動的にフォルダの種類を決定しています。画像だけ入ったフォルダなんかだと、自動的にフォルダーの種類がピクチャになってしまい、せっかくコマンドバーボタンを追加したのに表示されなくなります。その場合は、HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerFolderTypesの中からピクチャ用のGUIDを見つけて同じように設定してあげないといけません。メンドーですね~~~。

あと、整理ボタンのように、サブメニューが出るようなボタンも作れそうですが・・・また必要に迫れば・・・

【レジストリファイル】

【Part 1】と【Part 2】をまとめたレジストリファイルを参考に書いときます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksItemsSelected]
@="Windows.delete"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected\0]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected\0\{bc91001a-0adb-433c-b585-f0f33464964e}]
"InfoTip"="コマンドプロンプト"
"Title"="コマンドプロンプト"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected\0\{bc91001a-0adb-433c-b585-f0f33464964e}\Shell]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected\0\{bc91001a-0adb-433c-b585-f0f33464964e}\Shell\InvokeTask]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{5c4f28b5-f869-4e84-8e60-f11db97c5cc7}\TasksNoItemsSelected\0\{bc91001a-0adb-433c-b585-f0f33464964e}\Shell\InvokeTask\Command]
@="cmd.exe \"/k @ver && @echo Copyright (c) 2009 Microsoft Corporation.  All rights reserved. && @title コマンドプロンプト && @cd /D %*\""

 

エクスプローラー(Windows7)のコマンドバーにボタンを追加する」への2件のフィードバック

コメントは停止中です。