從 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 函數,那麼請訪問:
htt p://msdn.microsoft.com/en-us/library/windows/desktop/bb759853(v=vs.85).aspx
如果您好奇同一個 Group 文件夾下的眾多快捷方式是如何進行排序的,又是如何做到快捷方式的名稱與快速訪問菜單裡顯示的名稱又可以不一樣的,大家可以自己動手摸索和探究一下。小提示就是,不要忘記隱藏的 desktop.ini 文件咯~