あなただけの右クリックで、ストレスフリーな開発を。(コンテキストメニュー編集マニュアル)


#右クリックの重要性
開発を進めていく上で、右クリックはちょっとした機会に役立ちます。「**今ここにある**ファイルを分析したい！/ 編集したい！！」と思い立っても、ソフトを起動させてから、そのファイルを開くためにもう一度探すのは手間です。
そこで、右クリックです。右クリックを使えば、クリック1つですぐにソフトにそのファイルを読み込ませることができます。

こちらに、コンテキストメニュー (右クリックメニュー) の、編集用マニュアルをご用意しました。右クリックの奥深さを覗き見ながら、ぜひとも「自分だけの右クリック」でストレスのない開発を。

#<font color=red>※注意</font>
**`コンテキストメニューの編集には、レジストリ操作が伴います。レジストリエディタでの誤操作は、最悪の場合、WindowsOSの再インストールを伴う大規模なデータ破損を招く恐れがあります。この記事の情報をもとに行われたあらゆる操作において、こちらでは一切の責任を負いません。レジストリ操作は、すべて自己責任で行ってください。(Microsoftサポートも対象外となります)`**

この記事の内容は、**Windows 10 October Update (Version 1809)** に対応しています。ただし、使用するPCの環境により、OSのバージョンが同じでもうまく動作しない可能性もあります。

#編集の前に
##レジストリエディタの起動方法
`[Windowsキー] + [Rキー]`を押して、`ファイル名を指定して実行`を起動し、`regedit`と入力すると、レジストリエディタが起動します。

|![レジストリエディタを起動する様子](https://qiita-image-store.s3.amazonaws.com/0/305299/c23f55e2-7387-e605-b323-14a85b73ba85.png "レジストリエディタを起動する様子")
|:-:|

また、レジストリを編集する際には、**あらかじめバックアップを取ることを強くお勧めします。**
##バックアップの方法
編集したい部分のレジストリキーを右クリック > エクスポート とし、regファイルを保存しておいてください。誤操作があればこれを用いて復元できます。

|![キーのバックアップ](https://qiita-image-store.s3.amazonaws.com/0/305299/c7503a8d-8670-4b14-ed20-fe357474be35.png "エクスポートの様子")
|:-:|

#目次
<dl>

<dt>1章 <a href="#1章-背景部分での右クリック">背景部分での右クリック</a></dt>
    <dd>1-1. <a href="#1-1-フォルダの背景部分での右クリック-デスクトップを含む">フォルダの背景部分 (デスクトップを含む) での右クリック</a></dd>
    <dd>1-2. <a href="#1-2-デスクトップでの右クリック">デスクトップでの右クリック</a></dd>


<dt>2章 <a href="#2章-フォルダでの右クリック">フォルダでの右クリック</a></dt>
    <dd>2-1. <a href="#2-1-フォルダでの右クリック">フォルダでの右クリック</a></dd>
    <dd>2-2. <a href="#2-2-ドライブでの右クリック">ドライブでの右クリック</a></dd>
    <dd>2-3. <a href="#2-3-特殊フォルダでの右クリック">特殊フォルダでの右クリック</a></dd>
    <dd>2-4. <a href="#2-4-フォルダの最適化された目的の種類に合わせる">フォルダの最適化された目的の種類に合わせる</a></dd> 


<dt>3章 <a href="#3章-ファイルに対する右クリック">ファイルに対する右クリック</a></dd>
    <dd>3-1. <a href="#3-1-全ファイルに対する右クリック">全ファイルに対する右クリック</a></dd>
    <dd>3-2. <a href="#3-2-全ショートカットファイルに対する右クリック">全ショートカットファイルに対する右クリック</a></dd>
    <dd>3-3. <a href="#3-3-exeファイルおよびそのショートカットファイルの右クリック">exeファイル、およびそのショートカットファイルの右クリック</a>
    <dd>3-4. <a href="#3-4-特定の形式-拡張子-のファイルの右クリック">特定の形式 (拡張子) のファイルの右クリック</a></dd>
    <dd>3-5. <a href="#3-5-特定の種類のファイルの右クリック">特定の種類のファイルの右クリック</a></dd>
    <dd>3-6. <a href="#3-6-すべてのファイル--すべてのフォルダの右クリック">すべてのファイル / すべてのフォルダの右クリック</a></dd>

<dt>4章 <a href="#4章-ライブラリでの右クリック-まとめ">ライブラリでの右クリック (まとめ)</a></dt>
    <dd>4-1. <a href="#4-1-ライブラリの正体">ライブラリの正体</a></dd>
    <dd>4-2. <a href="#4-2-親ディレクトリの背景での右クリック">親ディレクトリの背景での右クリック</a></dd>
    <dd>4-3. <a href="#4-3-親ディレクトリのサブフォルダの背景での右クリック">親ディレクトリのサブフォルダの背景での右クリック</a></dd>
    <dd>4-4. <a href="#4-4-ライブラリ-library-msファイル-での右クリック">ライブラリ (.library-msファイル) での右クリック</a></dd>
    <dd>4-5. <a href="#4-5-ライブラリ内のファイル--フォルダでの右クリック">ライブラリ内のファイル / フォルダでの右クリック</a></dd>


<dt>5章 <a href="#5章-ナビゲーションウィンドウでの右クリック">ナビゲーションウィンドウでの右クリック</a></dt>


<dt>6章 <a href="#6章-オプション">オプション</a></dt>
    <dd>6-1. <a href="#6-1-表示名の変更">表示名の変更</a></dd>
    <dd>6-2. <a href="#6-2-アイコンの表示">アイコンの表示</a></dd>
    <dd>6-3. <a href="#6-3-shift--右クリック-でのみ表示されるようにする">「Shift + 右クリック」 でのみ表示されるようにする</a></dd>
    <dd>6-4. <a href="#6-4-右クリックしたディレクトリを作業ディレクトリにする">右クリックしたディレクトリを作業ディレクトリにする</a></dd>
    <dd>6-5. <a href="#6-5-右クリックの処理に管理者権限を付与">右クリックの処理に管理者権限を付与</a></dd>
    <dd>6-6. <a href="#6-6-フォルダでの右クリックの処理で管理者権限を付与">フォルダでの右クリックの処理で管理者権限を付与</a></dd>
    <dd>6-7. <a href="#6-7-メニューの表示位置の変更">メニューの表示位置の変更</a></dd>
    <dd>6-8. <a href="#6-8-編集に割り当てられているソフトの変更">「編集」に割り当てられているソフトの変更</a></dd>


<dt>7章 <a href="#7章-適用における優先順位">適用における優先順位</a></dt>
    <dd>7-1. <a href="#7-1-適用範囲とレジストリ">適用範囲とレジストリ</a></dd>
    <dd>7-2. <a href="#7-2-優先順位が発生する条件">優先順位が発生する条件</a></dd>
    <dd>7-3. <a href="#7-3-適用における優先順位表">適用における優先順位表</a></dd>
    <dd>7-4. <a href="#7-4-結論">結論</a></dd>


<dt>8章 <a href="#8章-hkcrhklmhkcu">HKCR・HKLM・HKCU</a></dt>


<dt>9章 <a href="#9章-その他-右クリックに関わるレジストリキー">その他 ~右クリックに関わるレジストリキー~</a></dt>

</dl>


この記事では、まず1章から5章で、右クリックをする対象に合わせたレジストリキーの編集場所と編集方法、6章でさらに細かい編集方法、そして追加情報を7章から先で述べていきます。
全体的に似たような文字が並ぶので、注意してご覧ください。
レジストリエディタでの基本的な操作については、省いている部分もあるので、初めてレジストリをいじる方にはわかりにくい部分があるかもしれません。

実行ファイル等のパスは、ご自身の環境に合わせて読み替えてください。


##※注意
ここでは、各所の`shell`キー以下にキーを追加していくことでコンテキストメニューを追加する方法を紹介しています。
説明を簡略化するため、`shellキー`**直下**のキー (以下の写真で赤く囲って示したキー) の名前を**`メニューの親キー`**と呼ぶことにします。

|![親キーの場所](https://qiita-image-store.s3.amazonaws.com/0/305299/79c27bea-b432-ccb4-884f-b0ca2fae2ba1.png "親キーの場所")
|:-:|

#1章 背景部分での右クリック
背景部分とは、フォルダの何もない部分を指します。背景部分での右クリックでは、右クリックしたフォルダが丸ごとソフトに読み込まれます。

##1-1. フォルダの背景部分での右クリック (デスクトップを含む)

|![フォルダの背景部分で右クリックした様子](https://qiita-image-store.s3.amazonaws.com/0/305299/bed99239-5fb1-2d11-e316-6e33ca9ca149.png "フォルダの背景部分で右クリックした様子")
|:-:|


↑ フォルダの背景部分で右クリックした様子

###`HKCU\Software\Classes\Directory\Background\shell\`以下を編集
フォルダの背景部分での右クリックメニューを編集する場合は、`HKCU\Software\Classes\Directory\Background\shell\`以下にキーを作成します。
ここでは、コンテキストメニューに、リネームソフト[お～瑠璃ね～む](https://www.vector.co.jp/soft/winnt/util/se156290.html)を開くメニューを追加します。

1. `HKCU\Software\Classes\Directory\Background\shell\`配下に新規キーを作成します。名前は何でも構いませんが、**右クリックした際のメニューの表示順序は、メニューの親キーの名前の降順 (文字コード順) になります。**ここでは、`allrename`という名前にしておきます。

2. allrenameキー配下に新規キーを作成します。名前は`command`とします。

    |![commandキーを追加した様子](https://qiita-image-store.s3.amazonaws.com/0/305299/1364eef9-5a11-e5ae-f78c-f78263e96e9d.png "commandキーを追加した様子")
|:-:|


3. `command`キーの、`既定`となっている値の`値のデータ`を編集します。形式は、

```
[右クリックから起動させる実行ファイルのフルパス] "%V"
```
です。実行ファイルのパスの後に、"%V"と続けることで、右クリックした際に実行ファイルが右クリックした対象を読み込みます。(基本的には、"%V"をつけますが、"%1"や"%L"と書かれているキーもあります。これらはすべて、ほぼ同じ意味です。)

|![値の編集の様子](https://qiita-image-store.s3.amazonaws.com/0/305299/c6b1532e-8b3a-2a14-7065-831c3d004cac.png "値の編集の様子")
|:-:|

これで、無事コンテキストメニューに追加できました。

|![追加完了](https://qiita-image-store.s3.amazonaws.com/0/305299/45c0f358-c857-21fd-f7bc-f713437b5fcb.png "項目が追加されている")
|:-:|


####※注意
コンテキストメニューに表示されるメニュー名については、<a href="#6-1-表示名の変更">6-1. 表示名の変更</a> も確認してください。

##1-2. デスクトップでの右クリック

###`HKCU\Software\Classes\DesktopBackground`以下を編集
デスクトップで右クリックしたときのみ表示されるコンテキストメニューです。
この場合は、`HKCU\Software\Classes\DesktopBackground`以下にキーを作成します。
手順は、1-1と全く同じなので省略します。

▲<a href="#目次">目次へ戻る</a>



##2章 フォルダでの右クリック
ここでの「フォルダ」は、1章で扱った「背景部分」ではなく、一般に言う「フォルダ」を指します。
また、ライブラリの扱いについて少々触れていますが、<a href="#4章-ライブラリでの右クリック-まとめ">4章 ライブラリでの右クリック (まとめ)</a>で詳しくまとめていますので、そちらもご覧ください。

##2-1. フォルダでの右クリック

|![フォルダを右クリックしたときの様子](https://qiita-image-store.s3.amazonaws.com/0/305299/2d404344-69c9-ffa1-b0c5-ac4d27fc3099.png "エクスプローラで表示されるフォルダを右クリックした様子")
|:-:|

↑ エクスプローラで表示されるフォルダを右クリックした様子

###`HKCU\Software\Classes\Directory\shell\`以下を編集
こちらも手順は1-1と同じなので省略します。


####※注意
**ライブラリ (以下の写真で示した.library-msファイルを指します) でのコンテキストメニューには適用されません。**ただし、ライブラリ内のフォルダは適用内です。

|![ライブラリ](https://qiita-image-store.s3.amazonaws.com/0/305299/244da2c8-a174-c7ce-4d66-40b75d450502.png "ライブラリ")
|:-:|




##2-2. ドライブでの右クリック

|![ドライブ](https://qiita-image-store.s3.amazonaws.com/0/305299/73bdca3b-7fe7-87a9-a06d-f229b58bd072.png "ドライブの様子")
|:-:|

↑ 「ドライブ」は、これを指します。
###`HKCU\Software\Classes\Drive\shell\`以下を編集
ドライブで右クリックしたときのみ表示されるコンテキストメニューです。
こちらも手順は1-1と同じなので省略します。




##2-3. 特殊フォルダでの右クリック
2-1と2-2では、通常のフォルダにおける右クリックにしか対応しておらず、**ライブラリと一部の特殊なフォルダには対応していません。**「一部の特殊なフォルダ」は、通常の方法では作成できませんが、PC内にいくつか存在しています。では一例として、PC内にインストールされたフォントが格納されているフォルダ `"C:\Windows\Fonts"` を右クリックしてみます。

|![allrenameがない様子](https://qiita-image-store.s3.amazonaws.com/0/305299/30a47626-b368-e9eb-179a-90459e27c079.png "allrenameがない様子")
|:-:|

`allrename`のメニューがありません。この場合、編集するキーが少々特殊なので注意してください。

###`HKCU\Software\Classes\Folder\shell\`以下を編集
追加手順は1-1と変わりませんが、ここで注意があります。ここにキーを追加すると、特殊フォルダでの右クリック (背景部分の右クリックは含まれない) に適用されるだけでなく、**`HKCU\Software\Classes\Directory\shell\`と`HKCU\Software\Classes\Drive\shell\`にもそのキーが追加されたようになります。(実際にキーが追加されるのではなく、追加されたのと同じ働きをする、というだけ)**
つまり、`HKCU\Software\Classes\Folder\shell`以下に追加したキーで、

- フォルダでの右クリック (背景部分の右クリックは含まない)
- ドライブでの右クリック
- ライブラリ / 特殊フォルダでの右クリック

の3つに対するコンテキストメニューを、同時に編集できます。

では、`HKCU\Software\Classes\Folder\shell`に、`HKCU\Software\Classes\Directory\shell\`や`HKCU\Software\Classes\Drive\shell\`に追加したのと全く同じキーを追加すると、同じメニューが2つ出るのかというと、そうではありません。詳しくは、<a href="#7章-適用における優先順位">7章 適用における優先順位</a> をご覧ください。


※「特殊フォルダ」/「通常フォルダ」という名称は正式名称ではない可能性があります。便宜上この名前を使用しています。






##2-4. フォルダの最適化された目的の種類に合わせる
###`HKCU\Software\Classes\SystemFileAssociations\Directory.[種類]\shell\`以下を編集
Windowsでは、フォルダの使用目的に応じて、[フォルダの最適化](https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020117#a02)<sup><a href="#注1">注1</a></sup>を行うことができます。
これに合わせて、表示されるコンテキストメニューも編集することができます。
`[種類]`の部分に使用できる名前は、以下の4つです。

- audio : `ミュージック`に最適化されているフォルダに対応
- image : `ピクチャ`に最適化されているフォルダに対応
- video : `ビデオ`に最適化されているフォルダに対応
- document : `ドキュメント`に最適化されているフォルダに対応

######注1
 リンク先は、ページの途中からとなっていますが、そこからがフォルダの最適化の話です。

####※注意
最適化された目的が`全般`になっている場合は、どのメニューも表示されません。また、無理矢理最適化の目的を変更した場合、それに応じて表示されるようになったコンテキストメニュー名が太文字になってしまうことがあるようです。(詳しい仕組みは分かりません)


▲<a href="#目次">目次へ戻る</a>






#3章 ファイルに対する右クリック
ファイルでの右クリックは、大きく以下の2つに分けられます。

1. 全ファイルに対する右クリック
2. 特定の拡張子のファイルの右クリック

しかし実際のところは、どういうわけかずいぶん複雑です。

##3-1. 全ファイルに対する右クリック
###`HKCU\Software\Classes\*\shell\`以下を編集
すべてのファイルを対象にした右クリックのメニューを編集する場合は、`HKCU\Software\Classes\*\shell\`以下にキーを作成します。
今度はコンテキストメニューに、拡張子判別ツール[WinExChange](https://www.vector.co.jp/soft/win95/util/se139464.html)のメニューを追加します。
手順は1-1と変わりません。

1. `HKCU\Software\Classes\*\shell\`配下に新規キーを作成します。ここでは`WinExChange`としておきます。
2. `WinExChange`キー配下にさらに新規キーを作成します。名前は`command`とします。
3. `command`キーの値の`値のデータ`を`"C:\Free_soft\WinExChange\WinExChange.exe" "%V"`とします。

以上です。

####※注意
`HKCU\Software\Classes\*\shell\`以下を編集すれば、基本的にほぼすべてのファイルに対してコンテキストメニューを編集できますが、**インターネットショートカットファイル (URLファイル) は適用外**です。


##3-2. 全ショートカットファイルに対する右クリック
###`HKCU\Software\Classes\lnkfile\shell\`以下を編集
すべてのショートカットファイル (lnkファイル) を対象にした右クリックのメニューを編集する場合は、`HKCU\Software\Classes\lnkfile\shell\`以下にキーを作成します。

####※注意
こちらも、**インターネットショートカットファイル(URLファイル)には適用外**です。


##3-3. exeファイル、およびそのショートカットファイルの右クリック
###`HKCU\Software\Classes\exefile\shell\`以下を編集
exeファイル、およびexeファイルをリンク先とするショートカットファイルの右クリックを編集する場合は、`HKCU\Software\Classes\exefile\shell\`以下にキーを作成します。exeファイル以外がリンク先になっているショートカットファイルには適用されません。



##3-4. 特定の形式 (拡張子) のファイルの右クリック
###`HKCU\Software\Classes\SystemFileAssociations\.[拡張子]\Shell\`以下を編集
どの形式のファイルのコンテキストメニューを編集するかによって、編集するキーが異なります。PNGファイルを右クリックした際に表示されるコンテキストメニューを編集する場合は、`HKCU\Software\Classes\SystemFileAssociations\.png\Shell\`以下を編集します。

####※注意
先ほど、`HKCU\Software\Classes\exefile\shell\`以下を編集した際は、その変更がexeファイルと、exeファイルをリンク先とするショートカットファイルの両方に適用されましたが、`HKCU\Software\Classes\SystemFileAssociations\.exe\Shell\`以下を編集した際も、exeファイルのみならず、exeファイルをリンク先とするショートカットファイルの両方に適用されます。
また、`HKCU\Software\Classes\SystemFileAssociations\.lnk\Shell\`以下を編集することで、ショートカットファイルのコンテキストメニューを編集することはできません。

さらに、拡張子`.library-ms`の項目を編集すれば、**一定の条件を満たす場合の**、ライブラリ (.library-msファイル) でのコンテキストメニューが編集できます。(ライブラリの扱いは複雑な部分があるので、<a href="#4章-ライブラリでの右クリック-まとめ">4章 ライブラリでの右クリック (まとめ)</a>を参考にしてください。)


####※備考
Windows10では、画像編集ソフト[GIMP](https://www.gimp.org/)で、`Edit with GIMP`のコンテキストメニューが表示されないというトラブルが発生しているようです。(いつのアップデートからそうなったのかは不明) 手元のPCで調べてみた結果、`Edit with GIMP`を表示するキーは、`HKLM\SOFTWARE\Classes\jpegfile\shell\`や`HKLM\Software\Classes\pngfile\shell\`<sup><a href="#注2">注2</a></sup>に作成されていました。exeファイルを除き、拡張子別でのコンテキストメニューの編集は`HKCU\Software\Classes\SystemFileAssociations\.[拡張子]\Shell\`以下を編集する必要があるため、`Edit with GIMP`の項目のコンテキストメニューへの追加が行われず、このようなトラブルが発生しているようです。
ただ、他のペイントソフトを見てみると、例えばJPEGファイルに対するコンテキストメニューでは、`HKCU\Software\Classes\jpegfile\shell\`と`HKCU\Software\Classes\SystemFileAssociations\.jpeg\Shell\`の両方にキーを作成しているものもありました。
これを見るに、拡張子別のコンテキストメニューの表示に関わるレジストリが、Windowsのアップデートとともに移動し、ソフトにより、対応に遅れが出ている可能性があります。(公式に問い合わせたわけではありません。あくまで予想です。)

######注2
 `HKLM\SOFTWARE\Classes\～～`というキーは、`HKCU\SOFTWARE\Classes\～～`と働きはほとんど一緒です。<a href="#8章-hkcrhklmhkcu">8章 HKCR・HKLM・HKCU</a>にも書いています。


##3-5. 特定の種類のファイルの右クリック
###`HKCU\Software\Classes\SystemFileAssociations\[種類]\shell\`以下を編集
PC上のファイルは、いくつかの種類に分けることができます。テキストファイルや画像ファイル、音楽ファイルなどです。そのような同種のファイルに対して一括でコンテキストメニューを編集したいときには、`HKCU\Software\Classes\SystemFileAssociations\[種類]\shell\`以下を編集します。
一例として、画像ファイルに一括で適用させる場合は、`HKCU\Software\Classes\SystemFileAssociations\image\shell\`以下を編集します。ここでの編集は、BMP,JPEG,PNG,GIF,TIFなど、主要な画像フォーマットに一括で適用されます。しかし、webp形式などの、対応しない形式もあり、一部で注意が必要になってきます。

`[種類]`の部分に使用できる名前について、確認できた分を書いておきます。(まだあるかもしれません)
ただ、ネット上では動くと書いてあっても、自分の環境では動かない、というものがたくさんありました。ひとまず私の環境下での動作をのせておきます。(環境によって差が出ているのではないかと思われます。)

- audio : 音声ファイルに対応
    - 主な形式 : `.aif` `.mp3` `.wav` `.wma` 等  (`.flac` はなぜか非対応。`.ogg`も非対応。)
- image : 画像ファイルに対応
    - 主な形式 : `.bmp` `.gif` `.jpg` `.png` `.tif` `.ico` 等
- video : 動画ファイルに対応
    - 主な形式 : `.avi` `.mpg` `.wmv` 等 (当然ながら、gifアニメーション、APNGは非対応。`.mkv`もだめでした。`.mp4`までなぜかだめ。)
- document : ドキュメントファイルに対応
    - 主な形式 : 全く反応せず (`.docx` `.pptx` `.xlsx` `.rtf` `.html` 等)
- text : テキストファイルに対応
    - 主な形式 :  `.text` `.ini` `.csv` `.xml` `.java` 等
- system : システムファイルに対応
    - 主な形式 : 全く反応せず (`.ocx` `.sys` `.manifest` 等)
- compressed : 圧縮ファイルに対応
    - 主な形式 : `.zip` 等 (私の環境ではzip以外反応しませんでした。`.lzh`もだめなのか...)




##3-6. すべてのファイル / すべてのフォルダの右クリック
###`HKCU\Software\Classes\AllFilesystemObjects\shell\`以下を編集
すべてのファイル / フォルダ (特殊フォルダも含む、ライブラリは適用外) のコンテキストメニューに適用されます。**デスクトップを含むフォルダの背景部分での右クリックと、ドライブ、ライブラリ (.library-msファイル) での右クリック以外、ほぼ適用内**となります。

####※注意
**インターネットショートカットファイル (URLファイル) にも適用**されます。


▲<a href="#目次">目次へ戻る</a>






#4章 ライブラリでの右クリック (まとめ)

ここでは、ライブラリでのコンテキストメニューについてまとめます。
ライブラリは便利な機能ですが、仮想的なものである以上、扱いも複雑です。

##4-1. ライブラリの正体
ライブラリの実態は、`"%APPDATA%\Microsoft\Windows\Libraries\"`に作成された.library-msファイルですが、実際はxmlファイルで、テキストエディタでも編集できます。
ライブラリは実在するフォルダではなく、このように仮想的なものであるために、容量を増やさずにフォルダ / ファイルを目的別に集約できるというメリットがあります。


ではここからは、`Qiita`という名前でライブラリを作成して、説明していきます。

|![ライブラリQiita](https://qiita-image-store.s3.amazonaws.com/0/305299/4ee7302c-84c4-6104-2239-ae59805e3bb8.png "作成したライブラリQiita")
|:-:|


`Qiitaライブラリ`を開くと、以下のような画面になっています。ここでは、`C:\Qiita_images`フォルダと、`C:\Qiita_htmls`フォルダを、`Qiitaライブラリ`に追加しています。


|![library_qiita.png](https://qiita-image-store.s3.amazonaws.com/0/305299/d6e17891-1e49-ebc3-73fe-165a26820da9.png)
|:-:|

説明簡略化のため、ライブラリを開いた**直後**に表示されているこの場所を、ライブラリの`親ディレクトリ`と呼ぶことにします。




##4-2. 親ディレクトリの背景での右クリック

###`HKCU\Software\Classes\directory\BackGround\shell\`以下を編集
<a href="#1-1-フォルダの背景部分での右クリック-デスクトップを含む">1-1. フォルダの背景部分 (デスクトップを含む) での右クリック</a>で紹介したレジストリキーです。
親ディレクトリの背景部分は、通常のフォルダの背景部分と同じ扱いです。




##4-3. 親ディレクトリのサブフォルダの背景での右クリック
###`HKCU\Software\Classes\LibraryFolder\background\shell\`以下を編集
親ディレクトリ以下、すべてのサブフォルダの背景部分では扱いが変わります。

####※注意
これはあくまで、**ライブラリから**そのフォルダにアクセスした場合に限ります。

###注意
`"%APPDATA%\Microsoft\Windows\Libraries\"`フォルダの背景部分での右クリック (下の写真) は、もちろん通常のフォルダの背景部分での右クリックと同じ扱いです。(このフォルダは、まだライブラリ内ではありません)





##4-4. ライブラリ (.library-msファイル) での右クリック

###通常の方法でアクセスした場合</dt>
####`HKEY_CURRENT_USER\Software\Classes\Folder\shell\`以下を編集
<a href="#2-3-特殊フォルダでの右クリック">2-3. 特殊フォルダでの右クリック</a>で紹介したレジストリキーです。

普通なら、これで問題ありません。

###上位階層から直接たどってアクセスした場合
「上位階層から直接たどる」とはつまり、`C:\`から、`usersフォルダ`に入り、`"%userprofile%"フォルダ`に入り、、、と、直接ライブラリの実態のファイル (.library-msファイル) があるところまで行き、それを右クリックすることを指しています。
この場合、.library-msファイルは通常のファイルと同じと見なされます。そのため、~~(ないとは思いますが)~~ このとき表示されるメニューを編集する場合は、3章の内容を参考にしてください。
ただし、通常の方法でアクセスした場合と同じく、`HKEY_CURRENT_USER\Software\Classes\Folder\shell\`以下の編集も有効です。(もう訳が分からないので、<a href="#ライブラリ-library-msファイル">7-3. 適用における優先順位表 > ライブラリ (.library-msファイル)</a>で確認してください。)



##4-5. ライブラリ内のファイル / フォルダでの右クリック
ライブラリ内のファイル / フォルダは、通常のファイル / フォルダと全く同じ扱いですので、2章、3章を参照してください。そもそも、ライブラリは実在するファイル / フォルダを仮想的にまとめているだけで、実際にアクセスしているのは実在しているファイルやフォルダそのものです。そう考えると、こうなることは当然と言えば当然ですね。



####※注意

`HKCU\Software\Classes\LibraryFolder\shell`以下に、何かしらのキーが存在すると、ライブラリを開こうとした際の挙動がおかしくなるので気をつけてください。



▲<a href="#目次">目次へ戻る</a>




　

#5章 ナビゲーションウィンドウでの右クリック
ナビゲーションウィンドウ上で右クリックをする機会は少ないかもしれませんが、上手く使えば、すばやく目的の場所にアクセスできます。ナビゲーションウィンドウ上でのコンテキストメニューの編集も、そこまで難しいものではありません。挙動は、エクスプローラのメイン画面でのものと全く同じです。
ナビゲーションウィンドウで表示されているフォルダを右クリックした際のコンテキストメニューは、通常のフォルダでのコンテキストメニューと全く同じです。ナビゲーションウィンドウで表示されているドライブを右クリックした際のコンテキストメニューも、通常のドライブでのコンテキストメニューと全く同じです。
ライブラリとフォルダが分かりにくいので、気をつけてください。

▲<a href="#目次">目次へ戻る</a>







#6章 オプション
ここから先は必ず設定しなければならないというものではありません。
1-1と同じく、`お～瑠璃ね～む`を例に説明しますが、他のソフトでも同じようにできます。


##6-1. 表示名の変更

右クリックをした際に表示される名前を変更します。

1. メニューの親キー (**commandキーではありません**) の値のデータを編集します。

|![値のデータを編集](https://qiita-image-store.s3.amazonaws.com/0/305299/26906c10-81c8-339b-93cb-b52033dc4df4.png "値のデータを編集")
|:-:|


`値のデータ`に表示名を入力することで、右クリックした際の名前を変更できます。
また、`[表示名](&[アルファベット一文字])`とすることで、右クリックをした後キーボードのキーを押して、起動できるようになります。ただし、キーボードのキーを押して起動できるようにはしない場合は、表示名を入力するだけで問題ありません。
値のデータを`お～瑠璃ね～むで開く(&A)`として、どのように変わったのか見てみます。

|![お～瑠璃ね～むで開く(&A)とする](https://qiita-image-store.s3.amazonaws.com/0/305299/c6e77254-b0b7-947a-5cf5-c0c4c30f584d.png "項目が更新されている")
|:-:|


###この方法を使うメリット

- 右クリックの表示順序を気にせず表示名を変えられる。(この場合、`allrename`キーを`お～瑠璃ね～むで開く`という名前にしてしまうと、もっと下の方に表示される)
- `右クリック + キーボードのキー` で開けるようになる。

####※注意
コンテキストメニューの表示名は、`[表示したい名前](&[任意のアルファベット1文字])`とするのが一般的ですが、`Open with All&Rename`のように、名前の中に`&`を入れても構いません。この場合、右クリックした後、`Rキー`を押すことで起動できます。ただし、右クリックした際、どのキーを押せば起動するのかがパッと見で分からないという欠点があります。(わかりにくいだけで、正しいキーを押せばちゃんと起動します) ただし、`Shiftキー + 右クリック`をすれば、その文字に下線が引かれて表示されるので、どのキーを押せば良いかは分かります。

|![Shift + 右クリックによる、キーの強調](https://qiita-image-store.s3.amazonaws.com/0/305299/af1f5cf6-2dbd-d3a2-dd1a-f5852985273d.png "Shift + 右クリックによる、キーの強調")
|:-:|
↑ `Shift + 右クリック`を行った様子

##6-2. アイコンの表示

1. **メニューの親キー配下**に、新規文字列値 を追加します。

    |![新規文字列値を追加](https://qiita-image-store.s3.amazonaws.com/0/305299/f1340d98-9622-47c4-a67e-c785d329855d.png "新規文字列値を追加した様子")
|:-:|

2. 名前を`Icon`にします。
3. `値のデータ`にアイコン画像を含むexe/dllファイルのパスを入れます。 必要な場合はアイコン番号 (アイコン番号の調べ方は後述) も指定し、

```
exe/dllファイルパス,-[アイコン番号]
```

という書式にします。また、icoファイルのパスを入れることもできます。

これでアイコンも表示されるようになりました。

|![アイコンが表示されている様子](https://qiita-image-store.s3.amazonaws.com/0/305299/928cbe52-f091-c64a-270f-5644d000d19f.png "アイコンが表示されている様子")
|:-:|

###アイコン番号の調べ方
exeファイルを指定する場合は基本的に気にしないことが多いですが、複数のアイコンの情報を保持しているdllファイルのアイコンを使用する場合は、アイコン番号を指定する必要があります。
ここでは、Visual Studioを用いた方法と、Resource Hackerを用いる方法を紹介します。

- Visual Studio を用いた方法


[Visual Studio](https://visualstudio.microsoft.com/ja/)で目的のdllファイルを開きます。アイコン番号は、Iconタブを開いて出てくる番号の中から指定します。(以下の写真で、目的のアイコンが上から5番目のものだった場合、指定するアイコン番号は1003となります。)

|![Visual Studioで見た様子](https://qiita-image-store.s3.amazonaws.com/0/305299/95f764fc-5d9a-f264-4cfb-78fc6223ca62.png "Visual Studioで見た様子")
|:-:|

- Resource Hacker を用いた方法

[Resource Hacker](http://www.angusj.com/resourcehacker/)というソフトを用いてアイコン番号を調べることもできます。Visual Studio と異なる点は、目的のdllファイルを読み込んだ後、**IconタブではなくIcon Groupタブを開く点**です。アイコン番号は、`:`の前に書かれた数字になります。

|![Resource Hackerで見た様子](https://qiita-image-store.s3.amazonaws.com/0/305299/44cb94da-a9ea-5622-89ef-9d072fb874f2.png "Resource Hackerで見た様子")
|:-:|

##6-3. 「Shift + 右クリック」 でのみ表示されるようにする
1. **メニューの親キー配下**に、新規文字列値 を追加します。
2. 名前を`Extended`にします。

これだけで、Shift + 右クリックしたときのみ、表示されるようになります。



##6-4. 右クリックしたディレクトリを作業ディレクトリにする
右クリックしたディレクトリを作業ディレクトリにします。

1. **メニューの親キー配下**に、新規文字列値 を追加します。
2. 名前を`NoWorkingDirectory`にします。

以上です。右クリックにcmdを追加する際などは、作業ディレクトリに注意した方が良いかと思いますが、ご自身で、使用する状況によって判断してください。基本的に、間違って作ったからといって特に大きな問題が起きることはありません。



##6-5. 右クリックの処理に管理者権限を付与
右クリックからの処理に、管理者権限を追加することができます。ただし、PowerShellを介して処理を行うだけです。`command`キーの`(既定)`と書かれた値の`値のデータ`に、`[実行ファイルのパス] "%V"`と書くところを、

```
powershell start-process [実行ファイルのパス] "%V" -verb runas
```

と書きます。PowerShellを介するため、一度PowerShellの画面が表示されますが、すぐに消え、ユーザーアカウント制御の画面が表示されます。




##6-6. フォルダでの右クリックの処理で管理者権限を付与
3-5の方法で、PowerShellを介せば管理者権限を付与できることを説明しましたが、フォルダに対する右クリックでは、別の方法もあります。
これまでは、新しくコンテキストメニューを追加する場合、`"～～～\shell\"`以下に任意の名前のキーを作成していたかと思いますが、この場合は、`runas`という名前のキーを作成します。その下に`command`キーを作成し、その後は同じです。最後に、**runasキーの**`(既定)`と書かれた値の、`値のデータ`にコンテキストメニューに表示させたい名前を入れれば完了です。




##6-7. メニューの表示位置の変更
各メニューの表示位置を、上のほうにしたり下のほうにしたり、できます。

1. メニューの親キー配下に、`新規文字列値`を追加します。
2. 名前を`position`にします。
3. この値の`値のデータ`で、そのあたりに表示させるかを指定します。

上の方に表示させるには`Top`、通常の位置に表示させるには`Middle`(これが規定値)、下の方に表示させるには`Bottom`を指定します。

|![一覧](https://qiita-image-store.s3.amazonaws.com/0/305299/2fdb7270-a26f-316a-dd67-2fae2302f2bc.png "一覧")
|:-:|




##6-8. 「編集」に割り当てられているソフトの変更
Windowsでは、一部の形式のファイルを右クリックしたときのみ、`編集(E)`という項目が現れます。対象となるファイルは、JPEGやPNGなどの主要な画像ファイル、TXTやINIなどのテキストファイル、およびBATファイル、PS1ファイルです。これらのコンテキストメニューに現れる、`編集(E)`という項目を選択すると、ファイル形式に合わせてソフトが起動します。画像ファイルには`ペイント`、テキストファイル、バッチファイルには`メモ帳`、PS1ファイルには`Windows PowerShell ISE`がデフォルトで対応しています。しかし、これらの対応も、編集することができます。

ここでは、バッチファイルの`編集(E)`の項目に、[VSCode](https://code.visualstudio.com/)を対応させます。
まず、`HKCU\Software\Classes\.bat`を見てみます。`既定`と書かれたキーの`値のデータ`を見てみると、`batfile`となっています。

|![.batキーの様子](https://qiita-image-store.s3.amazonaws.com/0/305299/489131b3-32ce-7df9-ca81-c31c6dfacb53.png ".batキーの様子")
|:-:|

ひとまず、ここでの意味は、「拡張子が`.bat`のファイルに対する基本的な情報を、`HKCU\Software\Classes\batfile`で取り決めています」という意味だと思っておいてください。
そこで、`HKCU\Software\Classes\batfile`を開きます。ここでは、`編集(E)`の部分を編集したいので、`HKCU\Software\Classes\batfile\shell\edit`を編集します。(無ければ作ってください。`shell`キーの作り忘れに注意です。) さらにその下に、`command`キーを追加します。
`値のデータ`を`"C:\Free_soft\Microsoft VS Code\Code.exe" "%1"`にすれば完了です。(実行ファイルのパスは環境に合わせて書き換えてください。)


▲<a href="#目次">目次へ戻る</a>




#7章 適用における優先順位
##7-1. 適用範囲とレジストリ
これまでも紹介した通り、各レジストリキーを追加することによるコンテキストメニューへの適用は、ほぼすべてのファイル / フォルダに及ぶ幅広いものから、特定の拡張子にしか適用されない狭い範囲のものまであります。
例えば、JPEGファイルの場合、このファイルを右クリックして表示されるコンテキストメニューは、

- `HKCU\Software\Classes\*\shell\`
- `HKCU\Software\Classes\SystemFileAssociations\.jpeg\Shell\`
- `HKCU\Software\Classes\SystemFileAssociations\image\shell\`
- `HKCU\Software\Classes\AllFilesystemObjects\shell\`

の4箇所を編集することで、変更することができます。しかし、コンテキストメニューへの適用には優先順位があり、以下の条件を満たす場合、この優先順位に基づいて、コンテキストメニューの内容が決定されます。逆にこれをうまく用いることで、条件分岐に似たようなことができたりできなかったりします。(する必要はない)

##7-2. 優先順位が発生する条件
1. 1つの対象 (ファイル / フォルダ) に対して、複数のメニューの割り当てが行われている場合 ( ← もちろん絶対条件)
2. その対象に関与するレジストリキーのうち、**メニューの親キーの名前が同じであった場合** (ただし、**大文字小文字は区別されない**)


この、条件2がミソで、**`shell`キーの真下だけ**見て、かぶっている名前のキーがあれば、今から紹介する優先順位が適用され、どちらかのみが表示されます。それ以外は別物とみなされるので、どちらも表示されます。
下の図を見てください。

```図1. 

HKCU\Software\Classes\
　┣ *\
　┃ ┣ shell\
　┃   　 ┗ gimp
　┃   　　　　 └ (既定) - REG_SZ - GIMPで開く
　┃  　　　　 ┗ command
　┃   　　　　　　　 └ (既定) - (以下略
```

```図2.

HKCU\Software\Classes\
　┣ SystemFileAssociations\
　┃  　　　　　 ┣.jpeg\
　┃  　　　　　　 　 ┣ shell\
　┃  　　　　 　　　　　　 ┗ GIMP
　┃   　　　　　　　　　　　　　 └ (既定) - REG_SZ - GIMPで開く (&G)
　┃   　　　　　　　　　　　　 ┗ command
　┃   　　　　　　　　　　　　　　　 └ (既定) - (以下略
```

```図3. 
<div>
　┣ SystemFileAssociations\
　┃  　　　　　 ┣ image\
　┃  　　　　　　 　 ┣ shell\
　┃  　　　　 　　　　　　 ┗ gimp_x64
　┃   　　　　　　　　　　　　　　　 └ (既定) - REG_SZ - GIMPで開く
　┃   　　　　　　　　　　　　　 ┗ command
　┃   　　　　　　　　　　　　　　　　　 └ (既定) - (以下略
```
図1から図3では、すべてJPEGファイルに対して、`GIMPで開く`というメニューを表示させています。では、実際にこのようにレジストリを編集した場合に、どうなるのか見ていきましょう。
先ほど、メニューの親キー、すなわち、**`shell`キーの真下のキーの名前が同じであった場合**、PCには同じ内容とみなされ、優先順位が発生すると説明しました。

`Shell`キー直下には、図1では、`gimp`キー、図2では、`GIMP`キー、図3では、`gimp_x64`キーが作成されています。**大文字と小文字は区別されない**ので、図1と図2はPCからは同じと見なされ、優先順位の適用内です。図3では、**`shell`キーの真下**のキーの名前が`gimp_x64`で、他の2つと異なるため、別物と見なされ、優先順位は関係なくコンテキストメニューに追加されます。
ここでポイントは、<font color="Red">図1と図2</font>では、**`shell`キーの真下のキーの名前以外**は<font color="Red">異なって</font>おり、逆に、<font color="Red">図1と図3</font>では、**`shell`キーの真下のキーの名前以外**<font color="Red">すべて同じです。</font>

あくまで、**`shell`キーの真下**のキーの名前で判断されます。

##7-3. 適用における優先順位表
優先順位が発生していないものもありますが、まとめの意味で載せています。

###背景 (ライブラリを除く)

|編集対象のレジストリキー| |デスクトップ|通常フォルダの背景|
|:---------:|:---------:|:---------:|:---------:|
|HKCU\Software\Classes\Directory\Background\shell\||**2**|**1**|
|HKCU\Software\Classes\DesktopBackground||**1**|/|




###背景 (ライブラリ)

|編集対象のレジストリキー| |親ディレクトリ|親ディレクトリ以下の全サブフォルダ|
|:---------:|:---------:|:---------:|:---------:|
|HKCU\Software\Classes\Directory\Background\shell\||**1**|/|
|HKCU\Software\Classes\LibraryFolder\background\shell\||/|**1**|




###フォルダ

|編集対象のレジストリキー| |通常のフォルダ|ドライブ|特殊フォルダ|
|:---------:|:---------:|:---------:|:---------:|:---------:|
|HKCU\Software\Classes\Directory\shell\||**3**|/|/|
|HKCU\Software\Classes\Drive\shell\||/|**2**|/|
|HKCU\Software\Classes\Folder\shell\||**1**|**1**|**1**|
|HKCU\Software\Classes\AllFilesystemObjects\shell\||**2**|/|**2**|

###ファイル (ライブラリ [.library-msファイル] 以外)

|編集対象のレジストリキー| |exeファイル|exeファイルをリンク先とするlnkファイル|その他のlnkファイル|その他の全ファイル|
|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|
|HKCU\Software\Classes\\*\shell\||**4**|**5**|**3**|**3**|
|HKCU\Software\Classes\lnkfile\shell\||/|**1**|**1**|/|
|HKCU\Software\Classes\exefile\shell\||**1**|**3**|/|/|
|HKCU\Software\Classes\SystemFileAssociations\\.exe\Shell\||**3**|**4**|/|/|
|HKCU\Software\Classes\SystemFileAssociations\\.[拡張子]\Shell\||/|/|/|**1**|
|HKCU\Software\Classes\SystemFileAssociations\\[種類]\shell\||/|/|/|**2**|
|HKCU\Software\Classes\AllFilesystemObjects\shell\||**2**|**2**|**2**|**4**|


###ライブラリ (.library-msファイル)
|編集対象のレジストリキー| |通常の方法でアクセスした場合|上位階層からたどっていった場合|
|:---------:|:---------:|:---------:|:---------:|
|HKCU\Software\Classes\Folder\shell\||**1**|**2**|
|HKCU\Software\Classes\\*\shell\||/|**3**|
|HKCU\Software\Classes\SystemFileAssociations\\.library-ms\Shell\||/|**1**|
|HKCU\Software\Classes\AllFilesystemObjects\shell\||/|**4**|





表内の数字は、小さいほど適用における優先順位が高いことを表しており、メニューの親キーの名前がかぶっていた場合は、その中でもっとも優先順位が高いものが採用されます。

(表内の`/`は、その対象の右クリックに関わるレジストリキーではないことを示します。見ればわかりますね。)

###※注意
`HKCU\Software\Classes\SystemFileAssociations\[種類]\shell\`を編集することでコンテキストメニューを変更できるようになるファイルは、特定の拡張子を持つものに限られます。

##7-4. 結論
結局、メニューの親キーの名前さえ変えれば、こんな面倒なことにはならないので、別の名前で作成しましょう。~~じゃぁこんな表いらｎ・・・~~

▲<a href="#目次">目次へ戻る</a>





#8章 HKCR・HKLM・HKCU
ここでは、`HKCU\Software\Classes\`以下のキーを編集しましたが、`HKLM\Software\Classes\`以下、または`HKCR\`以下を編集しても、同様の動作が期待できます。しかし、`HKCU\Software\Classes\`以下を編集するのが一番良いかと思われます。

まず、それぞれのキーの違いですが、HKCRには、現在ログインしているユーザー、HKLMには、PCの既定の設定に関する情報が書かれています。そして、HKCRは、HKCUとHKLMのプレビューみたいなものです。(どうやらマージ(併合)と呼ぶようです。) 何をプレビューしているのかというと、`HKCU\SOFTWARE\Classes\のキー`と、`HKCU\SOFTWARE\Classes\ に無い HKLM\SOFTWARE\Classes\のキー`です。

`HKCR\`にキーを追加すると、同名のキーが`HKCU\SOFTWARE\Classes\`にもあれば、`HKCU\SOFTWARE\Classes\`に追加され、無ければ、`HKLM\SOFTWARE\Classes\`に追加されます。

つまり、`HKCR\`に新しくキーを作った場合、それは`HKLM\SOFTWARE\Classes\`に追加されてしまうことになります。`HKLM\`には、PCの既定の設定が保存されているので、`HKCU\`を編集した方が安全です。これを踏まえて、この記事ではすべての編集を`HKCU\SOFTWARE\Classes\`で行うようにしています。また、何か問題が起きても、現在のユーザーにしかその影響が及ばないという点でも、`HKCU\SOFTWARE\Classes\`を編集するべきです。

▲<a href="#目次">目次へ戻る</a>




#9章 その他 ~右クリックに関わるレジストリキー~

右クリックメニューは非常に多彩で、多くのレジストリキーが関わっています。例えば、`shell`キーと同階層にある`shellex`キー内の、`\shellex\ContextMenuHandlers`にも、右クリックにかかわるキーが格納されています。見てみると、`値のデータ`には、謎の数列が書かれています。これはGUIDと呼ばれるもので、今回紹介した方法とは、まるでシステムが異なっているものです。一概に説明できるようなものでもないので、どうしても使いたい方は頑張ってググってください。
この他にも、個別のプログラムによって生成されるレジストリキーも多くあります。まあ、こんなもの見て回るくらいならディズニーランドを回りましょう。

▲<a href="#目次">目次へ戻る</a>





#あとがき
Windowsのアップデートに伴い、せっかく編集したレジストリも書き換えられてしまう可能性があるので、エクスポートして保存しておくほうがよいでしょう。

ここまで長々と書いてきましたが、なぜここまで右クリックにこだわるのかというと、デスクトップをきれいにしたかったからです。デスクトップのショートカットにD&Dなんて、効率悪いです。`[Windows]+[M]`ですべて最小化してから、うまい具合にエクスプローラを片側に寄せて・・・なんてやってるより、右クリックのほうが断然いいです。
それに、きれいなデスクトップはやる気が出ます。エラーと戦う前に、少しでもやる気を出しておかないとやってられません。
たまに反応が遅くなるのが欠点ですが。。。

いい方法ないかなぁ・・・