ショートカット メニュー ハンドラーと複数の動詞のベスト プラクティス
このトピックは次のように構成されています。
ベスト プラクティス
静的動詞は、実装する最も簡単な動詞であり、豊富な機能を提供します。 静的動詞メソッドのいずれかを使用して動詞を実装することを強くお勧めします。
動詞の実装に関するベスト プラクティス
次の一覧は、動詞の実装のベスト プラクティスを示しています。
- 常にニーズを満たす最も単純な動詞メソッドを選択してください。
- 可能であれば、静的動詞メソッドを使用します。
- UI スレッドでリソースを集中的に使用する操作や I/O を実行しないでください。 IShellExtInit::Initialize と IContextMenu::QueryContextMenu はどちらも、実行する作業において非常に保守的である必要があります。 IContextMenu::InvokeCommand は別のプロセスで実行する必要があります。または、呼び出し元をブロックしないように新しいスレッドを作成する必要があります。
- 次のように、独立系ソフトウェア ベンダー (ISV) 名で動詞のプレフィックスを付けます
ISVName.verb
。 修飾されていない名前を使用すると、同じ動詞名を選択した複数の ISV との競合が発生する可能性があります。 - 常にアプリケーション固有の ProgID を使用します。 一部の項目の種類ではこのマッピングが使用されないため、ベンダー固有の名前が必要です。
- 呼び出し元のメソッドを基準にして UI を配置しますが、呼び出し元スレッドでは実行しないでください。
- IContextMenu::InvokeCommand メソッドに渡される正規動詞の戻り値S_OKを受け入れないでください。 これを行うと、実際の動詞の実装のエラーが呼び出され、正規動詞のエラー コードが返されます。 正規動詞をサポートしていない場合は、0 以外の 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::QueryContextMenu または IContextMenu::InvokeCommand で処理します。
複数選択動詞のベスト プラクティス
複数選択動詞シナリオの項目数が多い場合があるため、動詞の実装のパフォーマンスへの影響を考慮することが重要です。 たとえば、ユーザーが多数の項目を含むスコープで "*" を検索し、[すべて選択] をクリックして右クリックすると、動詞に何千もの項目を含めることができる選択項目が表示されます。 その結果、動詞では、選択範囲の最初の項目と項目全体の数のみを考慮する必要があります。 最初の項目は、ビューの上部にある項目、またはユーザーが最初に右クリックした項目として定義されます。
Windows 7 以降では、ショートカット メニューを照会するときに動詞に渡される項目の数は 16 に制限されます。 その後、動詞が再作成され、その動詞が呼び出されたときに、完全な選択で再初期化されます。
場合によっては、少数の固定項目を検討することをお勧めします。 たとえば、"diff" 動詞では最初の 2 つの項目のみを考慮するのが適切です。 一般に、選択範囲のすべての項目をテストして特定の種類であるかどうかを確認したり、選択内のすべての項目にプロパティを照会したりする必要はありません。 最初の項目を見て、動詞を追加するのが適切かどうかを判断します。
異種選択
複数選択の場合は、疑いのない項目を動詞で処理できることを前提として、オプティミスティック動詞が自動的に追加されます。 これに対し、ペシミスティック動詞は、選択に疑いのない項目が含まれている場合には追加されず、項目数が少ない場合にのみ追加されます。
プレイヤー スタイルの動詞はオプティミスティックにし、処理されない項目は自動的にスキップする必要があります。 項目に対して操作を行わないと、データの損失や混乱が発生する可能性がある場合、動詞は処理できない項目についてユーザーに警告する必要があります。 たとえば、"backup" 動詞は、一部の項目をバックアップできなかったことを示す必要があります。
関連トピック