Windows 的額外檔案狀態:Shell Icon Overlay


「Shell Icon Overlay」是 Windows 作業系統的一個老東西,實際上、甚至也可以說是讓人覺得有點討厭的老包袱了…

他是什麼呢?基本上,就是各種軟體針對檔案、資料夾圖示、顯示的額外狀態圖示;一般人最有可能碰到的,應該就是網路儲存空間的同步軟體了~

像是 Google Drive for Desktop 所建立的磁碟機,在圖示或縮圖的左下角,都會有藍框的白雲代表是線上檔案、而綠底的勾勾則代表是本地端的檔案;這種讓使用者可以更方便地區分檔案狀態的輔助小圖示,就是 Windows 的 Shell Icon Overlay。

 

其他同類型的軟體,比如說 DropBox、OneDrive 其實也都有類似的東西(OneDrive 比較特別,晚點會講)。

此外,有在 Windows 下進行軟體開發的人,應該或多或少有聽過 TortoiseSVN(官網)或 TortoiseGit(官網)這類的版本控管程式。

他們為了讓開發者可以快速地確認檔案的版本狀態,所以也有使用 Shell Icon Overlay、讓使用者可以在檔案總管就馬上看的出來那些檔案修改過、那些有版本衝突,算是相當地實用。

而 Tortoise 甚至還提供多中 ICON 風格,讓使用者可以自己選擇。


感覺很棒的功能啊!那為什麼前面說「有點討厭的老包袱」呢?

如果你是有同時安裝了多套使用 Shell Icon Overlay 的軟體的人,應該就會碰過一個問題:「為什麼 XXX 軟體的狀態圖示不見了?」

會出現這個問題,其實就是踩到了 Shell Icon Overlay 的老舊設計限制,那就是 Windows 總共只支援 15 種 Shell Icon Overlay、其中 4 種是系統保留的,所以其他軟體只能使用最多 11 種 Shell Icon Overlay

而如果所有軟體的 Shell Icon Overlay 總數加起來超過 11 種,就要打架了!打輸的就不會顯示了~ XD

至於要怎麼確認呢?Shell Icon Overlay 的資訊,是儲存在 Windows Registry 裡,他的路徑是:

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers

以 Heresy 的電腦來說,使用 regedit 來看的話,他的樣子是下面的樣子:

其中,每一項都是一種 Shell Icon Overlay,所以 Heresy 的電腦裡總共有 25 種 SHell Icon Overlay。

這邊也可以看到,Tortoise 就有 9 個、OneDrive 就用了 7 個,所以基本上,只要裝了這兩套軟體,你就不可能顯示所有的 Shell Icon Overlay 了!這時候,就只能自己調整想看到那些 icon 了。(不過實際上,現在應該已經可以不用 OneDrive 的 Shell Icon Overlay 了 )

至於怎麼調整呢?基本上,Windows 的 Shell Icon Overlay 的處理方法,就是按照名稱來排順序,名字越前面的、就有越高的優先序,前 11 的都會被拿來使用,其他的就放置。

所以,這也是為什麼上圖中的機碼很多前面都一堆空白的原因(有的是官方自己就加的);實際上,要自己調整的話,最好的方法也是在前面加空白了~ XD

在上面的例子裡面,有 5 個在最前的 Tortoise 相關項目,就是 Heresy 手動加空白移上去的。

理論上在透過 regedit 修改好順序後,只要登出再重新登入,就可以看到修改後的結果了。

而如果自己需要的數量超過 11 個呢?請認命放棄吧~ XD

另外,這邊可能也要注意,有的軟體偵測到自己的項目被改名後,可能會再把他加回來(例如 OneDrive…);所以在修改後,可能還是需要多觀察狀況的。


而雖然大部分的軟體都會簡單地透過名稱說明每個項目的意義,方便使用者調整,但是像是微軟自己的 OneDrive 就很討厭,名稱只給了「OneDrive1~7」這樣的序列格式,一般人根本沒辦法搞懂個別是什麼…

如果真的想知道的話,可以參考維基百科的《List of shell icon overlay identifiers》,裡面有針對部分軟體的 Shell Icon Overlay 提供說明、以及對應的圖例;下面就是 OneDrive 的部分:


為什麼微軟這麼小氣,只給了 11 個 Shell Icon Overlay 呢?其實官方在《Why is there a limit of 15 shell icon overlays?》有解釋過,當初設計成 15 個,主要是最初設計成 16bit 的關係(Windows 95 中需要支援部分 16bit 的東西)。

長久累積下來,也讓要把這個 16bit 的 flag「升級」成更高的資料量變成難以處理的 break change。(所以說這是為了相容性的老包袱…)

再加上 Shell Icon Overlay 的機制只允許每個檔案擁有單一個 overlay,在現在來看彈性也不夠大,所以基本上,微軟已經沒有打算去修改這部分、來增加 Shell Icon Overlay 的數量了。

而為了解決這樣的問題,微軟提出來的解決方法,是放棄擴展既有的 Shell Icon Overlay,而是透過提供額外的 metadata 顯示機制,來做更好的顯示了!

實際上,目前在 Windows 10 的環境下,微軟自己的 OneDrive 已經不是在靠 Shell Icon Overlay 來做狀態的顯示了!

 

在現在的 OneDrive 資料夾中,如果是用清單模式來檢視的話,會看到一個「狀態」的欄位,會用圖示來顯示目前的狀態;而如果是大圖示、或是預覽縮圖的狀況,這個圖示則會在下方的檔案名稱的左側。

而這邊也可以看到,這個狀態的圖示是可能會同時顯示多個的,在使用上更為彈性。
(不過缺點似乎是在檔案總館左側的樹狀顯示看不到整個資料夾的狀態…)

也因此,其實現在如果發現自己的 Shell Icon Overlay 不夠用的話,其實是可以不用管 OneDrive 那 7 個、直接把其他項目擠上去的!

不過,OneDrive 還是很堅持地會自動加上那 7 個項目,所以也不建議在調整的時候去刪除、或是把他們前面的空白拿掉;因為之後 OneDrive 再次執行的時候,可能又會再加回去。

而這部分的新機制(其實也不新了,Windows 10 1709 應該就有了)應該是透過 Cloud Filter API 來實作的,官方其實也有給範例程式(連結);不過很可惜的是,其他軟體似乎都還是選擇繼續用舊的 Shell Icon Overlay 就是了…

對「Windows 的額外檔案狀態:Shell Icon Overlay」的想法

  1. 我是裝了Tortoise和Nextcloud,加起來剛好超過11,所以現象就特別靈異。而且Nextcould會在退出的時候嘗試把自己生成的Overlay刪除,所以開着Nextcloud,Tortoise就會掛;關了Nextcloud,Tortoise就恢復正常。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.