Bewährte Methoden für Kontextmenühandler und mehrere Verben

Dieses Thema ist wie folgt organisiert:

Bewährte Methoden

Statische Verben sind die einfachsten zu implementierenden Verben und bieten umfangreiche Funktionen. Wir empfehlen Ihnen dringend, ein Verb mit einer der statischen Verbmethoden zu implementieren.

Bewährte Methoden für Verbimplementierungen

Die folgende Liste stellt bewährte Methoden für Verbimplementierungen dar:

  • Wählen Sie immer die einfachste Verbmethode aus, die Ihren Anforderungen entspricht.
  • Verwenden Sie nach Möglichkeit eine statische Verbmethode.
  • Führen Sie keine ressourcenintensiven Vorgänge oder E/A-Vorgänge im UI-Thread aus. Sowohl IShellExtInit::Initialize als auch IContextMenu::QueryContextMenu müssen bei der Arbeit, die sie ausführen, sehr konservativ sein. IContextMenu::InvokeCommand muss in einem anderen Prozess ausgeführt werden, oder Sie müssen einen neuen Thread erstellen, um das Blockieren des Aufrufers zu vermeiden.
  • Präfixverben mit dem Namen des unabhängigen Softwareanbieters (ISV) wie folgt. ISVName.verb Die Verwendung nicht qualifizierter Namen kann zu Kollisionen mit mehreren ISVs führen, die denselben Verbnamen ausgewählt haben.
  • Verwenden Sie immer eine anwendungsspezifische ProgID. Da einige Elementtypen diese Zuordnung nicht verwenden, sind herstellerspezifische Namen erforderlich.
  • Positionieren Sie die Benutzeroberfläche relativ zur aufrufenden Methode, aber führen Sie sie nicht in einem Aufrufthread aus.
  • Akzeptieren Sie nicht den Rückgabewert S_OK für kanonische Verben, die an die IContextMenu::InvokeCommand-Methode übergeben werden. Dies führt dazu, dass die reale Verbimplementierung aufgerufen wird, und gibt einen Fehlercode für kanonische Verben zurück. Wenn Sie kanonische Verben nicht unterstützen, geben Sie einen Fehler zurück, wenn ein nichtzero HIWORD(lpVerb)-Wert gefunden wird.
  • Vermeiden Sie die Verwendung von rundll32.exe als Host für Ihr Verb.
  • Achten Sie beim Implementieren von IContextMenu::QueryContextMenu darauf, die Anzahl der Verben zurückzugeben, die dem Menü über den HRESULT-Wert mithilfe des ResultFromShort-Makros hinzugefügt wurden.
  • Wenn Sie sich für einen der folgenden Registrierungsschlüsseleinträge registrieren, sollten Sie vorsichtig sein, und achten Sie darauf, dass Sie Ihren Handler für den spezifischsten Typ registrieren, um die möglicherweise unbeabsichtigten Folgen zu verringern:
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Folder
    • HKEY_CLASSES_ROOT\Directory
  • Legen Sie die MayChangeDefaultMenu-Taste nur fest, wenn Sie erwarten, dass Sie das Standardverb im Kontextmenü ändern müssen. Wenn Ihr Handler das Standardverb nicht ändert, sollten Sie diesen Schlüssel nicht festlegen, da das System dadurch ihre DLL unnötig lädt.
  • Minimieren Sie die Arbeit, die Sie in IShellExtInit::Initialize ausführen. Erfassen Sie für Kontextmenühandler das an IShellExtInit::Initialize übergebene Datenobjekt, und verarbeiten Sie es dann in IContextMenu::QueryContextMenu oder IContextMenu::InvokeCommand.

Bewährte Methoden für Verben mit mehrfacher Auswahl

Da die Anzahl der Elemente in einem Multiauswahl-Verb-Szenario groß sein kann, ist es wichtig, dass Sie die Leistungsauswirkungen Ihrer Verbimplementierungen berücksichtigen. Wenn ein Benutzer beispielsweise über einen Bereich mit einer großen Anzahl von Elementen nach "*" sucht und dann auf Alle auswählen und mit der rechten Maustaste klickt, wird dem Verb eine Auswahl angezeigt, die Tausende von Elementen enthalten kann. Daher sollten Verben nur das erste Element in der Auswahl und die Gesamtanzahl der Elemente berücksichtigen. Das erste Element wird entweder als das Element am oberen Rand der Ansicht oder als das Element definiert, auf das der Benutzer zuerst mit der rechten Maustaste geklickt hat.

In Windows 7 und höher ist die Anzahl der an ein Verb übergebenen Elemente auf 16 beschränkt, wenn ein Kontextmenü abgefragt wird. Das Verb wird dann neu erstellt und mit der vollständigen Auswahl neu initialisiert, wenn dieses Verb aufgerufen wird.

In einigen Fällen empfiehlt es sich, eine kleine Anzahl von festen Elementen zu berücksichtigen. Beispielsweise empfiehlt es sich, für ein Verb "diff" nur die ersten beiden Elemente zu berücksichtigen. Im Allgemeinen müssen Sie nicht jedes Element in der Auswahl testen, um festzustellen, ob es sich um einen bestimmten Typ handelt, oder jedes Element in der Auswahl nach seinen Eigenschaften abfragen. Sehen Sie sich stattdessen das erste Element an, und entscheiden Sie, ob es angemessen ist, Ihr Verb hinzuzufügen.

Heterogene Auswahl

Optimistische Verben werden im Multiauswahlfall automatisch hinzugefügt, vorausgesetzt, dass nicht überprüfte Elemente vom Verb behandelt werden können. Im Gegensatz dazu werden pessimistische Verben nicht hinzugefügt, wenn die Auswahl ungesichtete Elemente enthält, und nur in Fällen hinzugefügt, in denen die Anzahl der Elemente gering ist.

Verben im Spielerstil sollten optimistisch sein und die Elemente, die nicht behandelt werden, im Hintergrund überspringen. Wenn ein Fehler beim Reagieren auf Elemente zu Datenverlust oder Verwirrung führen kann, sollte das Verb Benutzer vor Elementen warnen, die nicht verarbeitet werden können. Ein Verb "Sicherung" sollte beispielsweise angeben, dass einige Elemente nicht gesichert werden konnten.

Auswählen eines statischen oder dynamischen Verbs für das Kontextmenü

Erstellen von Kontextmenühandlern

Anpassen eines Kontextmenüs mithilfe dynamischer Verben

Kontextmenüs und Kontextmenühandler

Verben und Dateizuordnungen

Kontextmenüreferenz