建立快捷方式功能表處理常式

快顯功能表處理常式也稱為操作功能表處理常式或動詞處理常式,是檔案類型處理常式的類型。 這些處理常式可能會以會導致它們載入自己的進程或總管或其他協力廠商進程的方式進行插入。 建立進程內處理常式時,請小心,因為它們可能會造成載入處理常式的損害。

注意

註冊在 32 位應用程式的內容中運作的處理常式時,Windows 64 位版本的 Windows 有特殊考慮:在不同位的應用程式內容中叫用時,WOW64 子系統會將檔案系統存取重新導向至某些路徑。 如果您的.exe處理常式儲存在其中一個路徑中,則無法在此內容中存取。 因此,作為因應措施,請將您的.exe儲存在未重新導向的路徑中,或儲存啟動實際版本的.exe存根版本。

本主題的組織方式如下:

標準動詞

應用程式通常負責為所定義的動詞提供當地語系化的顯示字串。 不過,為了提供語言獨立程度,系統會定義一組常用的動詞,稱為標準動詞。 標準動詞永遠不會向使用者顯示,而且可以搭配任何 UI 語言使用。 系統會使用標準名稱自動產生正確當地語系化的顯示字串。 例如,開啟動詞的顯示字串會設定為英文系統上 的 Open ,以及德文系統上的德文對等專案。

標準動詞 Description
Open 開啟檔案或資料夾。
Opennew 在新視窗中開啟檔案或資料夾。
列印 列印檔案。
Printto 允許使用者將檔案拖曳至印表機物件來列印檔案。
瀏覽 開啟 Windows 檔案總管,並選取資料夾。
屬性 開啟物件的屬性工作表。

注意

Printto動詞也是標準動詞,但永遠不會顯示。 其包含可讓使用者藉由將檔案拖曳至印表機物件來列印檔案。

快捷方式功能表處理常式可以透過 ICoNtextMenu::GetCommandString 搭配 GCS_VERBWGCS_VERBA提供自己的標準動詞。 系統會使用標準動詞作為第二個參數, (傳遞至ShellExecutelpOperation) ,而且是CMINVOKECOMMANDINFO。傳遞至ICoNtextMenu::InvokeCommand方法的lpVerb成員。

擴充動詞

當使用者以滑鼠右鍵按一下物件時,快顯功能表會顯示預設動詞。 您可能想要在每個快捷方式功能表上,新增及支援某些快顯功能表上未顯示的命令。 例如,您可能有不常使用的命令,或適用于有經驗的使用者。 基於這個理由,您也可以定義一或多個擴充動詞。 這些動詞與一般動詞類似,但會以註冊動詞的方式區分出一般動詞。 若要能夠存取擴充動詞,使用者必須在按下 SHIFT 鍵時,以滑鼠右鍵按一下物件。 當使用者這麼做時,除了預設動詞之外,還會顯示擴充動詞。

您可以使用登錄來定義一或多個擴充動詞。 只有在使用者以滑鼠右鍵按一下物件,同步選取 SHIFT 鍵時,才會顯示相關聯的命令。 若要將動詞定義為擴充,請將「extended」 REG_SZ 值新增至動詞的子機碼。 值不應該有任何相關聯的資料。

僅以程式設計方式存取動詞

這些動詞永遠不會顯示在操作功能表中。 您可以使用ShellExecuteEx並指定pExecInfo參數的lpVerb欄位, (SHELLEXECUTEINFO物件) 來存取這些屬性。 若要只將動詞定義為程式設計存取,請將 「ProgrammaticAccessOnly」 REG_SZ 值新增至動詞的子機碼。 值不應該有任何相關聯的資料。

您可以使用登錄來定義一或多個擴充動詞。 只有在使用者以滑鼠右鍵按一下物件,同步選取 SHIFT 鍵時,才會顯示相關聯的命令。 若要將動詞定義為擴充,請將「extended」 REG_SZ 值新增至動詞的子機碼。 值不應該有任何相關聯的資料。

使用靜態動詞自訂快捷方式功能表

為快捷方式功能表選擇靜態或動態動詞之後,您可以註冊檔案類型的靜態動詞來擴充檔案類型的快捷方式功能表。 若要這樣做,請在與檔案類型相關聯之應用程式的 ProgID 子機碼下方新增 Shell 子機碼。 您可以選擇性地定義檔案類型的預設動詞,方法是讓它成為 Shell 子機碼的預設值。

預設動詞會先顯示在快捷方式功能表上。 其用途是提供 Shell,其可在呼叫 ShellExecuteEx 函式時使用動詞,但未指定動詞。 Shell 在此方式中使用 ShellExecuteEx 時,不一定選取預設動詞。

Shell 會依下列順序使用第一個可用的動詞:

  1. 預設動詞
  2. 如果指定動詞順序,則登錄中的第一個動詞動詞
  3. Open動詞
  4. Open With動詞

如果沒有列出的動詞,作業就會失敗。

針對您想要在 Shell 子機碼下新增的每個動詞建立一個子機碼。 每個子機碼都必須將 REG_SZ 值設定為動詞的顯示字串 (當地語系化字串) 。 針對每個動詞子機碼,建立一個命令子機碼,並將預設值設定為命令列來啟動專案。 對於標準動詞,例如 OpenPrint,您可以省略顯示字串,因為系統會自動顯示正確當地語系化的字串。 對於非標準動詞,如果您省略顯示字串,則會顯示動詞字串。

在下列登錄範例中,請注意:

  • 由於 Doit 不是標準動詞,因此會指派顯示名稱,您可以按下 D 鍵來選取它。
  • Printto動詞不會出現在快捷方式功能表上。 不過,其包含在登錄中可讓使用者在印表機圖示上卸載檔案來列印檔案。
  • 每個動詞都會顯示一個子機碼。 %1 代表檔案名和 %2 印表機名稱。
HKEY_CLASSES_ROOT
   .myp-ms
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = My Program Application
      Shell
         (Default) = doit
         doit
            (Default) = &Do It
            command
               (Default) = c:\MyDir\MyProgram.exe /d "%1"
         open
            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"

下圖根據上述登錄專案說明快捷方式功能表的延伸。 此快捷方式功能表在其功能表上具有 [開啟]、[ 執行]和 [ 列印 動詞],並以 [Do It ] 作為預設動詞。

執行預設動詞快捷方式功能表的螢幕擷取畫面

使用 IDropTarget 介面啟用處理常式

動態資料交換 (DDE) 已被取代;請改用 IDropTargetIDropTarget 更健全,且啟用支援更好,因為它使用處理程式的 COM 啟用。 在多重專案選取的情況下, IDropTarget 不會受限於 DDE 和 CreateProcess中找到的緩衝區大小限制。 此外,專案會以可轉換成專案陣列的資料物件的形式傳遞至應用程式,方法是使用 SHCreateShellItemArrayFromDataObject 函式。 這樣做比較簡單,而且不會遺失命名空間資訊,因為專案轉換成命令列或 DDE 通訊協定的路徑時發生。

如需檔案關聯屬性 之 IDropTarget 和 Shell 查詢的詳細資訊,請參閱 認知類型和應用程式註冊

指定靜態動詞的位置和順序

一般而言,動詞命令會根據列舉的方式排序在快捷方式功能表上;列舉會先根據關聯陣列的順序,再根據關聯陣列中的專案順序,如登錄的排序次序所定義。

動詞可藉由指定關聯專案的 Shell 子機碼預設值來排序。 這個預設值可以包含單一專案,這會顯示在快捷方式功能表的頂端位置,或是以空格或逗號分隔的專案清單。 在後者的情況下,清單中的第一個專案是預設專案,而其他動詞命令會以指定的順序立即顯示在它下方。

例如,下列登錄專案會依下列順序產生快捷方式功能表動詞:

  1. 顯示
  2. 小工具
  3. 個人化
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

同樣地,下列登錄專案會依下列順序產生快捷方式功能表動詞:

  1. 個人化
  2. 小工具
  3. 顯示
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

將動詞放在功能表的頂端或底部

下列登錄屬性可用來在功能表的頂端或底部放置動詞。 如果有多個動詞指定此屬性,則最後一個動詞會取得優先順序:

Position=Top | Bottom 

建立靜態級聯功能表

在 Windows 7 和更新版本中,透過登錄設定支援串聯功能表實作。 在 Windows 7 之前,只能透過 ICoNtextMenu 介面的實作來建立串聯功能表。 在 Windows 7 和更新版本中,只有在靜態方法不足時,才應該使用 COM 程式碼型解決方案。

下列螢幕擷取畫面提供級聯功能表的範例。

顯示級聯功能表範例的螢幕擷取畫面

在 Windows 7 和更新版本中,有三種方式可建立級聯功能表:

使用 SubCommands 登錄專案建立級聯功能表

在 Windows 7 和更新版本中,您可以使用 SubCommands 專案,使用下列程式建立串聯功能表。

使用 SubCommands 專案建立級聯功能表

  1. HKEY_CLASSES_ROOT\ProgID\層底下建立子機碼,以代表您的級聯功能表。 在此範例中,我們會將此子機碼命名為 CascadeTest。 確定 CascadeTest 子機碼的預設值是空的,並顯示為 未設定) (值

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. CascadeTest 子機碼中,新增類型 為 REG_SZ 的 MUIVerb 專案,並將其指派在快捷方式功能表上顯示為其名稱的文字。 在此範例中,我們會將其指派為「測試串聯功能表」。

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. CascadeTest 子機碼中,新增類型 REG_SZ 的 SubCommands 專案,該專案會依外觀順序出現在功能表上的動詞命令,依分號指定清單。 例如,我們在這裡指派一些系統提供的動詞:

    HKEY_CLASSES_ROOT
       *
          Shell
             CascadeTest
                SubCommands
                Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
    
  4. 如果是自訂動詞,請使用任何靜態動詞實作方法加以實作,並在 CommandStore 子機碼下列出它們,如虛構 動詞動詞 VerbName的這個範例所示:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      CommandStore
                         Shell
                            VerbName
                            command
                               (Default) = notepad.exe %1
    

注意

這個方法的優點是自訂動詞命令可以註冊一次,並藉由列出 SubCommands 專案下的動詞名稱來重複使用。 不過,它需要應用程式具有在 HKEY_LOCAL_MACHINE下修改登錄的許可權。

 

使用 ExtendedSubCommandsKey 登錄專案建立級聯功能表

在 Windows 7 和更新版本中,您可以使用 ExtendedSubCommandKey 專案來建立擴充級聯功能表:級聯功能表內的級聯功能表。

下列螢幕擷取畫面是延伸級聯功能表的範例。

顯示裝置延伸級聯功能表的螢幕擷取畫面

因為HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINE的組合,所以您可以在HKEY_CURRENT_USER\Software\Classes子機碼下註冊任何自訂動詞。 這樣做的主要優點是不需要提高許可權。 此外,其他檔案關聯可以藉由指定相同的 ExtendedSubCommandsKey 子機碼來重複使用這組完整的動詞。 如果您不需要重複使用這組動詞,您可以列出父代底下的動詞,但請確定父系的預設值是空的。

使用 ExtendedSubCommandsKey 專案建立級聯功能表

  1. HKEY_CLASSES_ROOT\ProgID\層底下建立子機碼,以代表您的級聯功能表。 在此範例中,我們會將此子機碼命名為 CascadeTest2。 確定 CascadeTest 子機碼的預設值是空的,並顯示為 未設定) (值

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. CascadeTest 子機碼中,新增類型 為 REG_SZ 的 MUIVerb 專案,並將其指派在快捷方式功能表上顯示為其名稱的文字。 在此範例中,我們會將其指派為「測試串聯功能表」。

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. 在您建立的 CascadeTest 子機碼下,新增 ExtendedSubCommandsKey 子機碼,然後新增檔子命令 (REG_SZ 類型) ;例如:

    HKEY_CLASSES_ROOT
       txtfile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Layout
                   Properties
                   Select all
    

    確定 [測試串聯功能表 2 ] 子機碼的預設值是空的,並顯示為 未設定) (值

  4. 使用下列任何靜態動詞實作填入子伺服器。 請注意,CommandFlags 子機碼代表 EXPCMDFLAGS 值。 如果您想要在串聯功能表項目前後加入分隔符號,請使用ECF_SEPARATORBEFORE (0x20) 或ECF_SEPARATORAFTER (0x40) 。 如需這些 Windows 7 和更新版本旗標的描述,請參閱 IExplorerCommand::GetFlags。 ECF_SEPARATORBEFORE僅適用于最上層功能表項目。 MUIVerb 的類型為 REG_SZ,而 CommandFlags 的類型為 REG_DWORD

    HKEY_CLASSES_ROOT
       txtile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Shell
                      cmd1
                         MUIVerb = Notepad
                         command
                            (Default) = %SystemRoot%\system32\notepad.exe %1
                      cmd2
                         MUIVerb = Wordpad
                         CommandFlags = 0x20
                         command
                            (Default) = "C:\Program Files\Windows NT\Accessories\wordpad.exe" %1
    

下列螢幕擷取畫面是先前登錄機碼專案範例的圖例。

顯示級聯功能表範例的螢幕擷取畫面,其中顯示記事本和文字板的選項

使用 IExplorerCommand 介面建立級聯功能表

將動詞新增至級聯功能表的另一個選項是透過 IExplorerCommand::EnumSubCommands。 這個方法可讓資料來源透過 IExplorerCommandProvider 提供其命令模組命令,以在快捷方式功能表上使用這些命令做為動詞。 在 Windows 7 和更新版本中,您可以使用 IExplorerCommand 提供與 使用 ICoNtextMenu相同的動詞實作。

下列兩個螢幕擷取畫面說明在 [ 裝置 ] 資料夾中使用級聯功能表。

顯示裝置資料夾中級聯功能表範例的螢幕擷取畫面。

下列螢幕擷取畫面說明 [裝置 ] 資料夾中的級聯功能表的另一個實作。

顯示裝置資料夾中級聯功能表範例的螢幕擷取畫面

注意

由於 IExplorerCommand 僅支援同進程啟用,因此建議由需要共用命令和快顯功能表之間實作的 Shell 資料來源使用。

 

使用進階查詢語法取得靜態動詞的動態行為

進階查詢語法 (AQS) 可以表示將使用動詞具現化專案的屬性來評估的條件。 此系統只適用于快速屬性。 這些是 Shell 資料來源報告速度很快的屬性,方法是不要從IShellFolder2::GetDefaultColumnState傳回SHCOLSTATE_SLOW

Windows 7 和更新版本支援標準值,以避免當地語系化組建發生問題。 當地語系化組建需要下列標準語法,才能利用此 Windows 7 增強功能。

System.StructuredQueryType.Boolean#True

在下列範例登錄專案中:

  • AppliesTo值可控制動詞是否顯示或隱藏。
  • DefaultAppliesTo 值會控制哪個動詞命令是預設值。
  • HasLUAShield 值可控制是否顯示使用者帳戶控制 (UAC) 防護。

在此範例中, DefaultAppliesTo 值會讓此動詞成為其檔案名中包含 「exampleText1」 這個字的任何檔案的預設值。 AppliesTo值會啟用名稱中包含 「exampleText1」 之任何檔案的動詞命令。 HasLUAShield值會顯示名稱中包含 「exampleText2」 之檔案的防護。

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            DefaultAppliesTo = System.ItemName:"exampleText1"
            HasLUAShield = System.ItemName:"exampleText2"
            AppliesTo = System.ItemName:"exampleText1"

新增 Command 子機碼和值:

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            Command
               (Default) = %SystemRoot%\system32\notepad.exe %1

在 Windows 7 登錄中,請參閱HKEY_CLASSES_ROOT\磁片磁碟機作為採用下列方法的 bitlocker 動詞命令範例:

  • AppliesTo = System.Volume.BitlockerProtection:=2
  • System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True

如需 AQS 的詳細資訊,請參閱 進階查詢語法

已淘汰:建立動詞與動態資料 Exchange 命令的關聯

DDE 已被取代;請改用 IDropTarget 。 DDE 已被取代,因為它依賴廣播視窗訊息來探索 DDE 伺服器。 DDE 伺服器停止回應廣播視窗訊息,因而停止其他應用程式的 DDE 交談。 單一停滯的應用程式通常會在使用者體驗中造成後續的所有停止回應。

IDropTarget方法更健全,且啟用支援較佳,因為它使用處理程式的 COM 啟用。 在多重專案選取的情況下, IDropTarget 不會受限於 DDE 和 CreateProcess中找到的緩衝區大小限制。 此外,專案會以可轉換成專案陣列的資料物件的形式傳遞至應用程式,方法是使用 SHCreateShellItemArrayFromDataObject 函式。 這樣做比較簡單,而且不會遺失命名空間資訊,因為專案轉換成命令列或 DDE 通訊協定的路徑時發生。

如需檔案關聯屬性 之 IDropTarget 和 Shell 查詢的詳細資訊,請參閱 認知類型和應用程式註冊

完成動詞實作工作

下列實作動詞命令的工作與靜態和動態動詞實作有關。 如需動態動詞的詳細資訊,請參閱 使用動態動詞自訂快捷方式功能表

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

許多預先定義的 Shell 物件都有可自訂的快顯功能表。 註冊命令的方式與註冊一般檔案類型的方式大致相同,但使用預先定義物件的名稱作為檔案類型名稱。

預先定義的物件清單位於建立殼層擴充處理常式的 [預先定義殼層物件] 區段中。 這些預先定義的 Shell 物件,其快顯功能表可以自訂,方法是在登錄中新增動詞命令,以使用 Verb 一字在資料表中標示。

擴充新的子功能表

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

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

若要指定檔案建立方法,請將一或多個資料值指派給 ShellNew 子機碼。 下表列出可用的值。

ShellNew 子機碼值 描述
命令 執行應用程式。 這個 REG_SZ 值會指定要執行之應用程式的路徑。 例如,您可以將它設定為啟動精靈。
資料 建立包含指定資料的檔案。 這個 REG_BINARY 值會指定檔案的資料。 如果指定NullFileFileName則會忽略資料
FileName 建立屬於指定檔案複本的檔案。 這個 REG_SZ 值會指定要複製之檔案的完整路徑。
NullFile 建立空的檔案。 NullFile 沒有指派值。 如果指定 NullFile ,則會忽略 DataFileName 登錄值。

 

下列登錄機碼範例和螢幕擷取畫面說明 .myp-ms 檔案類型 的新子功能表 。 它有一個命令 MyProgram Application

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
         NullFile

螢幕擷取畫面說明 [新增 ] 子功能表。 當使用者從[新增] 子功能表選取MyProgram Application時,Shell 會建立名為New MyProgram Application.myp-ms的檔案,並將它傳遞給MyProgram.exe

視窗總管的螢幕擷取畫面,其中顯示 「new」 子功能表上的新 「myprogram application」 命令

建立拖放處理常式

實作拖放處理常式的基本程式與傳統快捷方式功能表處理常式相同。 不過,快捷方式功能表處理常式通常會只使用傳遞至處理常式IShellExtInit::Initialize方法的IDataObject指標來擷取物件的名稱。 拖放處理常式可以實作更複雜的資料處理程式,以修改拖曳物件的行為。

當使用者以滑鼠右鍵按一下 Shell 物件以拖曳物件時,當使用者嘗試卸載物件時,會顯示快捷方式功能表。 下列螢幕擷取畫面說明典型的拖放快捷方式功能表。

拖放快捷方式功能表的螢幕擷取畫面

拖放處理常式是快捷方式功能表處理常式,可將專案新增至此快捷方式功能表。 拖放處理常式通常會在下列子機碼下註冊。

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

在針對拖放處理常式命名的 DragDropHandlers 子機碼下新增子機碼,並將子機碼的預設值設定為處理常式類別識別碼的字串形式, (CLSID) GUID。 下列範例會啟用 MyDD 拖放處理常式。

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers
            MyDD
               (Default) = {MyDD CLSID GUID}

隱藏動詞和控制可見度

您可以使用 Windows 原則設定來控制動詞可見度。 藉由將 SuppressPolicy 值或 SuppressPolicyEx GUID 值新增至動詞的登錄子機碼,即可透過原則設定來隱藏動詞命令。 將 SuppressionPolicy 子機碼的值設定為原則識別碼。 如果原則已開啟,則會隱藏動詞及其相關聯的快捷方式功能表項目。 如需可能的原則識別碼值,請參閱 RESTRICTIONS 列舉。

採用動詞選取模型

必須針對動詞設定登錄值,才能處理使用者可以從專案選取單一專案、多個專案或選取專案的情況。 動詞命令針對動詞支援的每一種情況,都需要個別的登錄值。 動詞選取模型的可能值如下所示:

  • 指定所有動詞的 MultiSelectModel 值。 如果未指定 MultiSelectModel 值,則會從您選擇的動詞實作類型推斷。 若為 COM 型方法, (例如 DropTarget 和 ExecuteCommand) Player,則會假設為 Document 的其他方法。
  • 針對僅支援單一選取專案的動詞指定 Single
  • 針對支援任意數目專案的動詞指定 Player
  • 針對每個專案建立最上層視窗的動詞指定 Document 。 這樣做會限制啟動的專案數目,並協助避免使用者開啟太多視窗時用盡系統資源。

當選取的專案數目不符合動詞選取模型,或大於下表中所述的預設限制時,動詞命令將無法顯示。

動詞實作的類型 文件 播放器
舊版 15 個專案 100 個專案
COM 15 個專案 沒有限制

 

以下是使用 MultiSelectModel 值的範例登錄專案。

HKEY_CLASSES_ROOT
   Folder
      shell
         open
             = MultiSelectModel = Document
HKEY_CLASSES_ROOT
   ProgID
      shell
         verb
             = MultiSelectModel = Single | Document | Player

使用專案屬性

您可以測試專案的 Shell 屬性的 SFGAO 旗標值,以判斷動詞應該啟用或停用。

若要使用此屬性功能,請在動詞命令底下新增下列 REG_DWORD 值:

  • AttributeMask 值會指定要測試遮罩之位值的 SFGAO 值。
  • AttributeValue 值會指定測試之位的 SFGAO 值。
  • ImpliedSelectionModel 會針對專案動詞指定零,或針對背景快捷方式功能表上的動詞指定非零。

在下列範例登錄專案中,AttributeMask 會設定為 SFGAO_READONLY (0x40000) 。

HKEY_CLASSES_ROOT
   txtfile
      Shell
         test.verb2
            AttributeMask = 0x40000
            AttributeValue = 0x0
            ImpliedSelectionModel = 0x0
            command
               (Default) = %SystemRoot%\system32\notepad.exe %1

透過 Desktop.ini 實作資料夾的自訂動詞

在 Windows 7 和更新版本中,您可以透過 Desktop.ini 將動詞新增至資料夾。 如需Desktop.ini檔案的詳細資訊,請參閱 如何使用 Desktop.ini自訂資料夾

注意

Desktop.ini檔案應一律標示為[系統 + 隱藏],因此不會向使用者顯示它們。

 

若要透過Desktop.ini檔案新增資料夾的自訂動詞命令,請執行下列步驟:

  1. 建立標示 為唯讀系統的資料夾。

  2. 建立包含 [的Desktop.ini檔案。ShellClassInfo] DirectoryClass=Folder ProgID。

  3. 在登錄中,使用 CanUseForDirectory 的值建立HKEY_CLASSES_ROOT\Folder ProgID。 CanUseForDirectory 值可避免誤用未參與透過Desktop.ini實作資料夾自訂動詞命令的 ProgID。

  4. FolderProgID 子機碼下新增動詞命令,例如:

    HKEY_CLASSES_ROOT
       CustomFolderType
          Shell
             MyVerb
                command
                   (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
    

注意

這些動詞命令可以是預設動詞,在此情況下,按兩下資料夾會啟動動詞。

 

快顯功能表處理常式和多個選取動詞的最佳做法

為快捷方式功能表選擇靜態或動態動詞

使用動態動詞自訂快捷方式功能表

快速鍵 (操作) 功能表和快顯功能表處理常式

動詞和檔案關聯

快捷方式功能表參考