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

本主題的組織方式如下:

最佳做法

靜態動詞是實作的最簡單動詞,並提供豐富的功能。 強烈建議您使用其中一個靜態動詞方法來實作動詞。

動詞實作的最佳做法

下列清單代表動詞實作的最佳做法:

  • 一律選擇最簡單動詞方法,以符合您的需求。
  • 可能的話,請使用靜態動詞方法。
  • 請勿在 UI 執行緒上執行需要大量資源的作業或 I/O。 IShellExtInit::InitializeICoNtextMenu::QueryCoNtextMenu都必須在執行的工作中非常保守。 ICoNtextMenu::InvokeCommand 必須在另一個進程中執行,或者您必須建立新的執行緒以避免封鎖呼叫端。
  • 獨立軟體廠商的前置詞動詞 (ISV) 名稱, ISVName.verb 如下所示。 使用不合格的名稱可能會導致與多個選擇相同動詞名稱的 ISV 發生衝突。
  • 一律使用應用程式特定的 ProgID。 因為某些專案類型不會使用此對應,所以需要廠商唯一的名稱。
  • 將 UI 置於相對於叫用方法的位置,但不會在叫用程式執行緒上執行。
  • 不接受傳遞至ICoNtextMenu::InvokeCommand方法之標準動詞命令的傳回值S_OK。 這麼做會導致叫用實際動詞實作失敗,並傳回標準動詞命令的失敗碼。 如果您不支援標準動詞,則在遇到非零 HIWORD (lpVerb) 值時,傳回失敗。
  • 請避免 使用rundll32.exe 作為動詞的主機。
  • 實作 ICoNtextMenu::QueryCoNtextMenu 時,請務必使用 ResultFromShort 宏,透過 HRESULT 值傳回已新增至功能表的動詞數目。
  • 如果您在下列其中一個登錄機碼專案上註冊,請小心,請務必在最特定的類型上註冊處理常式,以減少可能非預期的結果:
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Folder
    • HKEY_CLASSES_ROOT\Directory
  • 只有在您預期可能需要變更快顯功能表中的預設動詞命令時,才設定 MayChangeDefaultMenu 鍵。 如果您的處理常式未變更預設動詞,則您不應該設定此索引鍵,因為這樣做會導致系統不必要的載入 DLL。
  • 您在 IShellExtInit::Initialize中執行的工作最小化。 針對快捷方式功能表處理常式,擷取傳遞至 IShellExtInit::Initialize的資料物件,然後在 ICoNtextMenu::QueryCoNtextMenuICoNtextMenu::InvokeCommand中處理它。

多重選取動詞的最佳做法

由於多重選取動詞案例中的專案數目可能很大,因此請務必考慮動詞實作的效能影響。 例如,當使用者在包含大量專案的範圍上搜尋 「*」,然後按一下 [ 全選 ] 並以滑鼠右鍵按一下時,動詞會顯示一個可以有數千個專案的選取專案。 因此,動詞命令應該只考慮選取範圍中的第一個專案,以及整體專案計數。 第一個專案定義為檢視頂端的專案,或使用者第一次按一下滑鼠右鍵的專案。

在 Windows 7 和更新版本中,查詢快捷方式功能表時,傳遞至動詞命令的專案數目限制為 16。 接著會重新建立動詞,並在叫用該動詞時,使用完整選取專案重新初始化動詞。

在某些情況下,請考慮少量固定專案。 例如,「差異」動詞適合只考慮前兩個專案。 一般而言,您不需要測試選取範圍中的每個專案,以查看它是否為特定類型,或查詢選取範圍中每個專案的屬性。 查看第一個專案,並決定是否適合新增動詞。

異質性選取專案

在多重選取案例中會自動新增開放式動詞,假設動詞可以處理未指定的專案。 相反地,當選取範圍包含未指定的專案時,不會加入封閉式動詞,而且只會在專案數目很小的情況下新增。

播放程式樣式動詞應該為開放式,並以無訊息方式略過未處理的專案。 如果無法對專案採取行動可能會導致資料遺失或混淆,則動詞命令應該警告使用者有關無法處理的專案。 例如,「備份」動詞應該指出某些專案無法備份。

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

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

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

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

動詞和檔案關聯

快捷方式功能表參考