天天看點

揭秘 Win8 的快速通路菜單

從 Windows 95 開始,每個版本的 Windows 的工作列上,都有某種形式的"開始"按鈕。而在 Windows 8 中,這一點得以重塑,"開始"按鈕從此消失。如下圖所示,在 Win8 中您所看到的工作列左側第一圖示是固定的應用程式圖示,而不是"開始"按鈕。

雖然沒了"開始"按鈕,我們在Win8上可以通過更為快捷和自然的方式打開"開始"螢幕:

1. 對于觸控裝置,将手指從螢幕右側向内滑動,可觸發超級按鈕欄,然後選擇"開始"超級按鈕。

2. 将滑鼠移動至螢幕左下角,并單擊滑鼠左鍵。

不知您是否有注意到,将滑鼠移至螢幕左下角後,單擊一下滑鼠右鍵會有什麼發生呢?

沒錯,這個就是單擊滑鼠右鍵,或者按下 Win+X 組合鍵後所得到的彈出式快捷菜單。這裡我們稱之為 Win+X 菜單,或者"快速通路菜單"。對于熱衷于傳統快速啟動欄或者傳統開始菜單的朋友們,它看似是一個可以好好利用的地方。但是它真的可以被自定義嗎?經我的測試,對于預設的這些個條目,如果您不喜歡,可以删除;但是您想加進來快捷方式的話,恐怕有些難度。

就像某些地方介紹的一樣,其實,這個快速通路菜單的内容呢,都是儲存在使用者配置檔案的一個檔案夾中的。這個檔案夾的路徑是 %LocalAppData%\Microsoft\Windows\WinX 。通過資料總管鍵入這個位址,我們可以轉到這個檔案夾:

随便打開其中一個檔案夾,你可以發現裡面其實都是快捷方式哦~

那麼為什麼有三個檔案夾?它們與快速通路菜單有何關系呢?

其實,仔細看可以發現,快速通路菜單上面是有兩條分隔線的,這兩條線将菜單分為了上中下三個區域,自上而下,每個區域裡面的快捷方式集合分别對應着檔案夾中的 Group 3、Group 2和Group 1這三個檔案夾,就像是這樣:

那麼,例如我們要把桌面這個條目删除,隻需去 Group 1 這個檔案夾下,删除其快捷方式即可。如果你要重新增加一組呢,那可以建立一個檔案夾重命名為"Group4"。這些操作在重新開機資料總管程序後生效。

可是對于自定義該菜單,難度出現在哪裡呢?難度其實就是這裡預先存在的快捷方式們都不是普通的快捷方式。這些快捷方式被算出哈希值(Hash),并且在系統啟動的時候通過一些子產品對這些位置的快捷方式進行哈希值校驗。隻有通過的快捷方式在登入後才可供使用,而自定義的那些由于通不過檢查,是以最終還是不能顯現出來。(起初我們走了很多彎路,以為跟系統資料庫的某些鍵值有直接關系,其實不然。)

既然是這樣,那我們從理論上有兩種辦法去繞過這一機制,一種是找到這些算出的Hash值是跟哪兒的hash值進行對比的,也就是說,我們可以往可能存在的一個Hash值庫裡面添加我們自定義的快捷方式的Hash值;而第二種辦法呢,則是關閉系統的這個Hash值校驗功能,讓所有的自定義快捷方式同預先定義的特殊快捷方式混在一起,都顯示出來。

對于第一種辦法,其實系統可以通過 HashData 函數,将快捷方式的指向位址等一些資訊進行聯合計算,算出一個唯一的Hash值,存在系統的某個Object中,像檔案的Metadata裡面可不可以存呢?我覺得還是有可能的。那會不會有個編譯好的檔案存儲這些Hash呢?也是有可能的吧,總之可能性是多種多樣的,篇幅有限,這裡不深入進一步研究探讨。

對于第二種辦法,我們已經看見,system32 下面是有一個系統檔案專門負責展現新的"開始"螢幕和負責一些 Modern UI 的事情的,叫"twinui.dll"。經證明,它的一部分内容控制着 Windows 8 啟動時對這些快捷方式進行 Hash 校驗與否。我們可以通過 Hex 編輯器将其中的部分内容進行修改,達到關閉 Hash 校驗的目的。具體做法,在這裡不便透露。而且篡改系統檔案有可能會造成系統的不穩定,這也一直是不推薦的做法。但對于學習和研究目的,我們發現了它的存在,也終于發現了這個機制背後的一些過程。

目前,如果您要學習和研究 Win+X 快速通路菜單這一塊,那麼就像當初要對 Windows 7 應用第三方自定義主題一樣,得對管理這個機制的系統檔案進行修改。建議您修改前先備份,并可使用網上廣為流傳的名叫"Win+X Menu Editor"的一款小程式進行修改。

我想,微軟在這一塊做了限制,一方面是為了防止惡意軟體在使用者不知情的情況下利用這裡進行不安全的操作,另一方面呢,則是希望能保護原生的 Windows 8 産品設計和使用者體驗,不希望這個快速通路菜單成了 Windows 傳統開始菜單的複原地。您覺得呢?歡迎各位提出觀點和進行讨論。

最後,如果您要了解上文提到過的系統中的 HashData 函數,那麼請通路: 

<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb759853(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/bb759853(v=vs.85).aspx</a>

如果您好奇同一個 Group 檔案夾下的衆多快捷方式是如何進行排序的,又是如何做到快捷方式的名稱與快速通路菜單裡顯示的名稱又可以不一樣的,大家可以自己動手摸索和探究一下。小提示就是,不要忘記隐藏的 desktop.ini 檔案咯~

本文轉自 hbycscc 51CTO部落格,原文連結:http://blog.51cto.com/mvperic/1088732

繼續閱讀