共用方式為


擴充快捷功能表

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

這裡提供其他資訊:

檔案系統物件的快捷方式功能表

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

因為快捷功能表通常用於檔案管理,殼層會提供一組預設命令,例如剪下和複製,出現在任何檔案的快捷方式功能表上。 請注意,雖然 Open With 是預設命令,但不會顯示某些標準文件類型,例如 .wav。 範例 [我的檔] 目錄的下圖,也用來做為自定義圖示中的範例,顯示以滑鼠右鍵按兩下 MyDocs4.xyz 顯示的預設快捷方式功能表。

screen shot of the default shortcut menu for file system objects

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

screen shot of the customized shortcut menu for file system objects

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

擴充檔類型快捷方式功能表所需的所有專案,就是為每個命令建立登錄專案。 更複雜的方法是實 作快捷方式功能表處理程式,讓您以檔案為基礎擴充檔類型的快捷方式功能表。 如需詳細資訊,請參閱 建立操作功能表處理程式

快捷功能表動詞

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

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

"My Program.exe" "%1"

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

注意

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

 

動詞也可以有與其 相關聯的顯示字串,該字串 會顯示在快捷方式功能表上,而不是動詞字串本身。 例如,openas顯示字串是 Open With。 就像一般功能表字串一樣,在顯示字串中包含 ampersand (&) 允許鍵盤選取命令。

標準動詞

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

標準動詞包括:

Description
open 開啟檔案或資料夾。
opennew 在新視窗中開啟檔案或資料夾。
print 列印檔案。
探索 開啟 Windows 檔案總管,並選取資料夾。
find 開啟 [ Windows 搜尋] 對話框,並將資料夾設定為預設搜尋位置。
openas 開啟 [ 開啟方式] 對話框。
內容 開啟物件的屬性表。

 

printto 動詞也是正式的,但永遠不會顯示。 它可讓使用者將檔案拖曳至印表機物件來印表檔案。

擴充動詞

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

擴充檔類型的快捷方式功能表

擴充檔類型快捷方式功能表最簡單的方式是登錄。 若要這樣做,請在與文件類型相關聯之應用程式的 ProgID 機碼下方新增 Shell 子機碼。 您可以選擇性地定義檔類型的默認動詞,方法是將它設為Shell子機碼的預設值。

默認動詞會先顯示在快捷方式功能表上。 其用途是在呼叫ShellExecuteEx但未指定動詞時,提供它可以使用的動詞命令殼層。 Shell 在此方式中使用ShellExecuteEx,不一定選取默認動詞。 針對在 Windows 2000 和更新版本系統上找到的 Shell 5.0 版和更新版本,Shell 會使用下列清單中的第一個可用動詞命令。 如果沒有可用的作業,作業就會失敗。

  • 開啟動詞
  • 默認動詞命令
  • 登錄中的第一個動詞命令
  • openwith 動詞

針對 5.0 版之前的 Shell 版本,請省略第三個專案。

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

下圖顯示 [檔案類型] 和 [自定義圖示] 中使用的 .myp 檔案類型快捷方式功能表。 它現在在其快捷方式功能表上已開啟、doit、列印和 printto 動詞,並將 doit 作為預設動詞。 快捷方式功能表看起來像這樣。

screen shot of the customized shortcut menu

用來擴充上圖所示快捷方式功能表的登錄專案如下:

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 不是標準動詞,所以會指派顯示名稱 “&Do It”,其可按 D 鍵加以選取。 printto 動詞不會出現在快捷方式功能表上,但包括它可讓使用者將檔案放在印表機圖示上來列印檔案。 在此範例中,%1 代表檔名和 %2 印表機名稱。

動詞可透過原則設定隱藏,方法是將 SuppressPolicy 值新增至動詞的索引鍵。 將 SuppressionPolicy 的值設定為原則標識碼。 如果原則已開啟,則會隱藏動詞和其相關聯的快捷方式功能表項。 如需可能的原則標識碼值,請參閱 RESTRICTIONS 列舉。

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

許多預先定義的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 子機碼,以指定檔案建立方法。 可用的值如下。

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

 

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

screen shot of the custom new menu

登錄項目現在如下所示:

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