作業系統外殼的定義是它是一個系統提供的使用者介面,它允許使用者執行公用的任務,如訪問檔案系統,匯出執行程式,改變系統設定等。ms-dos有一個command.com扮演著這個角色。然而Windows已經有了圖形介面環境,他的外殼程式也就必然是圖形方式的。在Windows95以前,預設的Windows Shell就是程式管理器。程式管理器是一個中央控制台,從那裡你可以啟動應用程式,重排和重組表徵圖,執行新任務。現在對應程式管理器的是檔案管理工具,它是一個專門為維護檔案系統而設計的工具。
隨著Windows95的出現,探測器取代了這兩個老工具,並整合了二者的功能,一般錯誤的概念認為,探測器就是一個程式,當你需要通過點擊“我的電腦”或右擊[開始] 按鈕來瀏覽檔案系統時這個程式啟動。事實上,探測器總是啟動和運行著的,從引導開始一直到你關閉電腦。直覺是“探測器”實際上就是新概念下的視窗。探測器是一個可執行模組(explorer.exe),它實現了Windows外殼功能。
下面介紹shell外殼的組成部分和探測器結構。
Shell的組成部分
Shell由許多不同的部分組成,現在我們就從最顯而易見的案頭和任務條開始。
案頭是所有Windows Shell對象的父物件,即宿主對象。就實現方式而言,案頭是一個系統定義視窗類別的特殊視窗,並且是所有視窗的祖先視窗。那些匯出應用的頂層視窗一般而言都是案頭的子視窗。
主要的Windows Shell組件就是任務條,它實際上就是由探測器進程所擁有的一個視窗。每當你需要終止探測器進程的時候,都將引起任務條的消失和重新顯現。每當他重新顯現的時候他註冊一個具有不同HWND的新視窗。因而,就引用而言,你沒有必要保留這個視窗的HWND 。任務條也是也各擁有[開始] 按鈕的視窗,在托盤地區有時鐘和類似按鈕的控制項,表示正在啟動並執行應用。任務條實際上與視窗一樣,可以在其上作任何視窗上可以做的操作如移動、隱藏和子類化等。
探測器結構
探測器是一個扮演著系統外殼角色的應用程式。當說到外殼擴充的時候,我們講的就是有探測器感知的、裝入的並最終執行的代碼塊。
在探測器環境中,基本上有兩種類型的擴充:外殼擴充和命名空間擴充。從名字上看有點混淆,探測器就是Windows的外殼,所以兩種類型的擴充都可以作為外殼擴充。換句話說,外殼和命名空間擴充二者都擴充了探測器能力。但是在他們之間有一些差別。
外殼擴充是一種加到給定類型的所有檔案上的客戶行為,給定類型的檔案按照客戶要求顯示在探測器的觀察中。如此,你可以稱之為“外殼觀察的擴充”。客戶的行為,如拖拽,右擊關聯菜單,繪製表徵圖或顯示內容對話方塊等由一定數量的特殊事件觸發。你可以定義這些事件的特殊處理器程式,例如你可以確定顯示給定.Bmp檔案的表徵圖,為所有Windows 元檔案加一個預覽頁面到屬性對話方塊,甚至可以在關聯菜單中增加一個可執行功能。
命名空間擴充有兩種形式,這要看你怎樣串連。如果你用檔案類型串連命名空間擴充,儘管有複雜的代碼支援,其功能上仍然等價於關聯菜單的擴充。然而,如果你用檔案夾串連命名空間擴充,這個檔案夾將變成客戶檔案夾,你的代碼將確定檔案夾的內容、探測器顯示的表徵圖、子檔案夾、排序、關聯菜單等。