やじうまの杜

ファイル隅の小さなアイコン、その座をめぐる熾烈な争いと「OneDrive」のセコいやり口が話題に

争いはやめて! それはもう古い仕様よ!

 「やじうまの杜」では、ニュース・レビューにこだわらない幅広い話題をお伝えします。

ファイル左下にときどき小さく表示されている「シェル アイコン オーバーレイ」(Shell Icon Overlay)。ファイルの同期状態などを示すために用いられる

 「エクスプローラー」のファイル左下にときどき小さいアイコンが表示されていることがありますよね? あれは「シェル アイコン オーバーレイ」(Shell Icon Overlay、オーバーレイ画像)と呼び、ファイルの同期状態などを示すために用いられているのですが、実は登録できる数が非常に限られているのだとか。

 その限られた椅子を奪い合うため、Microsoftの「OneDrive」同期アプリとサードパーティー製アプリが、レジストリを舞台に人知れずバトルを繰り広げているらしい……ということが話題になっています。

 「シェル アイコン オーバーレイ」をシステムに登録するには、以下のレジストリエントリに情報を書き込む必要があります。

HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Explorer¥ShellIconOverlayIdentifiers¥EnhancedStorageShell

 しかし、「エクスプローラー」が実際に利用するのは 上から15個だけ です。他のアプリに占領されてしまっては自分のオーバーレイ画像を表示することができなくなるので、一部のアプリはレジストリエントリの名前の先頭に半角空白を挿入するというハックを駆使して、他を出し抜こうとします。

 たとえば「OneDrive」は7個のオーバーレイ画像を登録していますが、レジストリエントリの名前の頭には半角空白が5つも挿入されています。だいぶセコいですが、そのおかげでリストの上位を独占できています。

OS標準アプリとは思えないセコい方法でオーバーレイ画像の枠を確保する「OneDrive」同期アプリ

 ちなみに、「Google ドライブ」は4つです。他にもシステム予約済みのものがいくつかあるようで、これだけでオーバーレイ画像の制限(15個)はほぼ埋まってしまいます。そのため、「Dropbox」や「TortoiseGit」(「Git」のGUIクライアント)といったアプリではよくオーバーレイ画像が表示されないという問題が報告されており、「Google」で検索すればその解決策がいくつもヒットします(やり方はたいてい、当該レジストリエントリの名前を編集して、先頭に半角空白を挿入しまくることです)。

 しかし、なぜこんな制限があるのでしょうか。

 Microsoftの中の人によると、この仕様は16bit時代からあるとのこと。かつてオーバーレイ画像の番号は4bitで管理されており(最大で2^4=16まで)、「0」がオーバーレイなしで予約されていたため、最大で15個しか登録できなかったというわけです。

 この制限を緩和することもできたのですが、修正箇所が多岐にわたる、修正が多くのモジュールに影響し、バイナリ互換性が壊れる可能性があるなどなどの理由で、そのままにされているとのこと。

 なお、オーバーレイ画像の利用はもはや推奨されていません。Windows 10以降、ファイルの同期状態をオーバーレイではなく「状態」カラムで表す方式が導入されており、その利用が推奨されています。

 オーバーレイ画像はファイルの状態を1つしか表せませんが、「ステータス カラム」ならば複数の状態(クラウドにあって、共有されているなど)を表すことができるので、より優れた方式といえるでしょう。

オーバーレイ画像は古い、Windows 10からは「状態」カラムの利用が推奨。「エクスプローラー」をリストビューからアイコン表示に切り替えてもちゃんと機能します

 無駄な争いはやめて、モダンな仕様に対応していただければ幸いです。