共用方式為


擴充捷徑選單

以滑鼠右鍵按兩下物件通常會導致 快捷方式功能表的顯示。 此功能表包含一份命令清單,使用者可以選取以在對象上執行各種動作。 本節是文件系統物件的快捷方式功能表簡介。

這裡提供其他資訊:

檔案系統物件的快速鍵功能表

當使用者以滑鼠右鍵按下物件,例如在 Windows 檔案總管或桌面上顯示的檔案時,快捷方式功能表會出現包含命令清單。 然後,使用者可以選取適當的命令,在檔案上執行動作,例如開啟或刪除檔案。

因為捷徑選單通常用於檔案管理, Shell 提供了一組預設命令,例如剪下和複製,這些命令會出現在任何檔案的捷徑選單中。 請注意,雖然 Open With 是預設命令,但不會顯示某些標準文件類型,例如.wav。 範例《我的文件》目錄的下圖,也作為《自定義圖示》中的範例,顯示了在 MyDocs4.xyz 上以滑鼠右鍵點擊顯示的預設快顯功能表。

檔系統物件預設快捷方式功能表的螢幕快照

MyDocs4.xyz 顯示預設快捷方式功能表的原因是它不是已註冊 檔類型的成員。 另一方面,.txt 是已註冊的文件類型。 如果您以滑鼠右鍵按兩下其中一個 .txt 檔案,則會改為在其上方區段中看到具有兩個額外命令的快捷方式功能表: 開啟列印

檔系統物件的自定義快捷方式功能表螢幕快照

註冊文件類型之後,您可以使用其他命令擴充其快捷方式功能表。 當以滑鼠右鍵按下該類型的任何檔案時,它們會顯示在預設命令上方。 雖然以這種方式新增的大部分命令都是常見的命令,例如 PrintOpen,但您可以免費新增任何使用者可能覺得有説明的命令。

要擴展檔案類型的快捷方式選單,所需的只是為每個命令建立一個登錄項目。 更複雜的方法是實作 快捷方式功能表處理程式,讓您以檔案為基礎擴充檔類型的快捷方式功能表。 如需詳細資訊,請參閱 建立內容功能表處理程式

快捷功能表動詞

捷徑功能表上的每一個命令都會在登錄中以其verb進行識別。 這些動詞與以程式設計方式啟動應用程式時,ShellExecuteEx 所使用的動詞相同。 如需使用 ShellExecuteEx的詳細資訊,請參閱 啟動應用程式中的討論。

簡單的文字字串 verb 是由Shell用來識別相關聯命令的。 每個 verb 對應至用來在主控台視窗或批次 (.bat) 檔案中啟動命令的 命令字串 。 例如, 開啟verb 通常會啟動程式以開啟檔案。 其指令字串通常看起來像這樣:

"My Program.exe" "%1"

“%1” 是檔名所提供命令行參數的標準佔位符。 例如,它可以指定要顯示在索引標籤式檢視中的特定頁面。

備註

如果命令字串的任何專案包含或可能包含空格,則必須以引號括住。 否則,如果專案包含空格,則不會正確剖析。 例如,「我的 Program.exe」將會正確啟動應用程式。 如果您使用 My Program.exe,系統會嘗試啟動 「My」 與 「Program.exe」 作為第一個命令行自變數。 您應該一律使用引號搭配「%1」等引數,這些引數會由Shell展開為字串,因為您無法確定字串不會包含空格。

 

動詞也可以有與其相關聯的 顯示字串 ,該字串會顯示在快捷方式功能表上,而不是 verb 字串本身。 例如, openas 的顯示字串是 Open With。 像一般功能表字串一樣,顯示字串中包含和號 &,便可通過鍵盤選擇命令。

標準動詞

一般而言,應用程式會負責為所定義的動詞提供本地化的顯示字串。 不過,為了提供語言獨立性的程度,系統會定義一組常用的動詞,稱為規範動詞。 標準 verb 可以搭配任何語言使用,而且系統會自動產生正確本地化的顯示字串。 例如,open 的顯示字串將會設定為英文系統上的 Openverb,以及德文系統上的 Öffnen。

標準動詞包括:

價值觀 說明
開啟 開啟檔案或資料夾。
opennew 在新視窗中開啟檔案或資料夾。
列印 列印檔案。
探討 開啟 Windows 檔案總管,並選取資料夾。
尋找 開啟 [ Windows 搜尋] 對話框,並將資料夾設定為預設搜尋位置。
openas 開啟 [開啟方式] 對話框。
屬性 開啟物件的屬性表。

 

printto verb 也是正式的,但永遠不會顯示。 它可讓使用者將檔案拖曳至印表機以列印檔案。

擴充動詞

當使用者以滑鼠右鍵按下物件時,快捷方式功能表會包含所有一般動詞。 不過,您可能會希望支援某些未顯示在每個快捷選單上的命令。 例如,您可以有一些不常使用或適用於有經驗使用者的命令。 基於這個理由,您也可以定義一或多個 擴充動詞。 這些動詞也是字元字串,類似於一般動詞。 它們在標記方式上與一般動詞有所區別。 若要存取與擴充動詞相關的命令,用戶必須在按下 SHIFT 鍵時以滑鼠右鍵按兩下物件。 然後,擴充動詞會連同一般動詞一起顯示。

擴充檔案類型的右鍵選單

最簡單的方式來擴充檔案類型的捷徑選單是使用登錄。 若要這樣做,請在與文件類型相關聯的應用程式 ProgID 機碼下方新增Shell子機碼。 您可以選擇性地為檔案類型定義預設值verb,方法是將該預設值設為Shell 子機碼的預設值。

預設值 verb 會先顯示在快捷方式功能表上。 其用途是提供Shellverb一個可以使用的選項,當被執行ShellExecuteEx但未指定verb時。 Shell在此方式中使用ShellExecuteEx時,不一定選取預設值verb。 針對 Shell5.0 版和更新版本,在 Windows 2000 和後續版本的系統上,Shell 會使用以下清單中的第一個可用 verb。 如果沒有可用的選項,操作就會失敗。

  • 開啟 verb
  • 預設值 verb
  • 登錄中的第一個verb
  • openwith verb

對於 Shell 版本在 5.0 版之前的情況,請省略第三個項目。

Shell 子機碼下方,為每個您想要新增的 verb 子機碼建立一個子機碼。 每個子機碼都會將 REG_SZ 的值設定為 verb 的顯示字串。 您可以省略標準動詞的顯示字串,因為系統會自動顯示正確本地化的字串。 如果您省略非標準動詞的顯示字串,則會顯示 verb 字串。 針對每個 verb 子機碼,建立 命令 子機碼,並將預設值設定為命令字串。

下圖顯示 [ 檔案類型 ] 和 [自定義圖示] 中使用的 .myp 檔案類型快捷方式功能表。 它現在在其捷徑選單上載有開、doit、列印及列印至等命令,其中 doit 為預設命令 verb。 快捷方式功能表看起來像這樣。

自定義快捷方式功能表的螢幕快照

用於擴充上圖顯示的捷徑功能表的登錄項目如下:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4

雖然 Open With 命令位於第一個分隔符上方,但系統會自動建立此命令,而且不需要登錄項目。 系統會自動建立規範動詞「開啟」和「列印」的顯示名稱。 因為 "doit" 不是標準的verb,它被指派了顯示名稱「&Do It」,並且可以透過按下 D 鍵來選擇。 printto verb 不會出現在快捷選單上,但包含它可讓使用者將檔案拖曳到印表機圖示上進行列印。 在此範例中,%1 代表檔名,並 %2 印表機名稱。

動詞可透過原則設定隱藏,方法是將 SuppressionPolicy 值新增至 verb 的鍵。 將 SuppressionPolicy 的值設定為原則標識碼。 如果原則已開啟,verb 和其相關的捷徑選單項目會被隱藏。 如需可能的原則標識碼值,請參閱 RESTRICTIONS 列舉。

擴充預先定義 Shell 物件的快捷方式功能表

許多預先定義的 Shell 物件都有可擴充的快捷功能表。 以您註冊一般檔類型的方式註冊命令,但使用預先定義的物件名稱做為檔類型名稱。

您可以在建立Shell延伸模組處理程式的 [預先Shell定義物件] 區段中找到預先定義的物件清單。 透過在登錄中新增動詞來擴充捷徑選單的預先定義Shell物件,在表格中會被標示為 "Verb" 一字。

註冊應用程式以處理任意文件類型

本檔的前幾節已討論如何定義特定檔類型的快捷方式功能表項。 除此之外,定義快捷方式功能表可讓您指定相關聯應用程式開啟檔案類型成員的方式。 不過,如 檔案類型中所述,應用程式也可以註冊一個單獨的預設程序,當使用者嘗試用您的應用程式開啟您未與之建立關聯的檔案類型時,就會使用這個程序。 本主題在這裡討論,因為您註冊預設程式的方式與註冊快捷方式功能表項的方式大致相同。

默認程式有兩個基本用途。 其中一個是指定應如何叫用您的應用程式來開啟任意文件類型。 例如,您可以使用命令行旗標來指出開啟未知的文件類型。 另一個目的是定義文件類型的各種特性,例如快捷方式功能表項和圖示。 如果使用者將您的應用程式與其他檔案類型產生關聯,該類型將具有這些特性。 如果先前與另一個應用程式相關聯的其他檔類型,這些特性將會取代原始專案。

若要註冊預設程式,請將您為應用程式的 ProgID 建立的相同登錄機碼放在應用程式 HKEY_CLASSES_ROOT\應用程式的子機碼之下。 您也可以包含 FriendlyAppName 值,為系統提供應用程式的易記名稱。 應用程式的易記名稱也可能從其可執行檔中擷取,但只有在FriendlyAppName值不存在時才會擷取。 下列登錄片段顯示 MyProgram.exe 範例預設程式,定義易記名稱和數個快捷方式功能表項。 命令字串包含 /a 旗標,以通知應用程式正在開啟任意文件類型。 如果您包含 DefaultIcon 子機碼,則應該使用泛型圖示。

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         shell
            open
               command
                  (Default) = C:\MyDir\MyProgram.exe /a "%1"
            print
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1"
            printto
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2" %3 %4

擴充新子選單

當使用者在 Windows 檔案總管中開啟 [ 檔案 ] 功能表時,第一個命令是 [新增]。 選取此命令會顯示子功能表。 根據預設,它包含兩個命令 FolderShortcut,可讓使用者建立子資料夾和快捷方式。 您可以擴充此子功能表,以包含任何文件類型的檔案建立命令。

若要將檔案建立命令新增至 [新增 ] 子功能表,您的應用程式檔案必須具有與其相關聯的 文件類型 。 在檔案名稱附檔名的機碼下加入 ShellNew 子機碼。 選取 [ 檔案 ] 功能表的 [ 新增 ] 命令時, Shell 會將它新增至 [新增 ] 子功能表。 命令的顯示字串將會是指派給程式 ProgID 的描述性字串。

將一或多個數據值指派給 ShellNew 子機碼,以指定檔案建立方法。 可用的值如下。

價值觀 說明
指令 執行應用程式。 這是 REG_SZ值 ,指定要執行之應用程式的路徑。 例如,您可以將它設定為啟動精靈。
資料 建立包含指定數據的檔案。 數據是具有檔案數據的 REG_BINARY 值。 如果指定 NullFile 或 FileName,則會忽略數據。
檔案名稱 建立檔案,該檔案是指定檔案的複本。 FileName 是 REG_SZ 值,設定為要複製之檔案的完整路徑。
NullFile (空文件) 建立空白檔案。 NullFile 未指派值。 如果指定 NullFile,則會忽略 Data 和 FileName 值。

 

下圖顯示 .myp 檔案類型 的新子功能表 ,做為 [文件類型 ] 和 [自定義圖示] 中的範例。 它現在有一個 MyProgram 應用程式 的命令。 當使用者從 [新增] 子功能表選取 MyProgram Application 時,會Shell建立名為 “New MyProgram Application.myp” 的檔案,並將它傳遞至 MyProgram.exe。

自訂新功能表的螢幕快照

登錄項目現在如下所示:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4