Freigeben über


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

Dieses Thema ist wie folgt organisiert:

Bewährte Methoden

Statische Verben sind die einfachsten Verben, die implementiert werden können, und bieten umfangreiche Funktionen. Wir empfehlen Ihnen dringend, ein Verb mithilfe einer der statischen Verbmethoden zu implementieren.

Bewährte Methoden für die Implementierung von Verben

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 in der von ihnen ausgeführten Arbeit 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, müssen anbieterspezifische Namen benötigt werden.
  • Positionieren Sie die Benutzeroberfläche relativ zur aufrufenden Methode, aber führen Sie dies nicht auf einem Aufruferthread aus.
  • Akzeptieren Sie nicht den Rückgabewert S_OK für kanonische Verben, die an die IContextMenu::InvokeCommand-Methode übergeben werden. Wenn dies getan wird, schlägt die tatsächliche Implementierung des Verbs fehl und ein Fehlercode für kanonische Verben wird zurückgegeben. Wenn Sie kanonische Verben nicht unterstützen, geben Sie einen Fehler zurück, wenn ein HIWORD(lpVerb)-Wert ungleich null 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 über den HRESULT-Wert mithilfe des ResultFromShort-Makros dem Menü hinzugefügt wurden.
  • Wenn Sie sich bei einem der folgenden Registrierungsschlüsseleinträge registrieren, achten Sie darauf, dass Sie den 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\Ordner
    • HKEY_CLASSES_ROOT\Directory
  • Legen Sie die MayChangeDefaultMenu-Taste nur fest, wenn Sie davon ausgehen, dass Sie möglicherweise das Standardverb im Kontextmenü ändern müssen. Wenn der Handler das Standardverb nicht ändert, sollten Sie diesen Schlüssel nicht festlegen, da dadurch das System die 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 Mehrfachauswahlverben

Da die Anzahl der Elemente in einem Verbszenario mit mehrfacher Auswahl groß sein kann, ist es wichtig, dass Sie die Leistungsauswirkungen Ihrer Verbimplementierungen berücksichtigen. Wenn ein Benutzer z. B. nach "*" über einen Bereich sucht, der eine große Anzahl von Elementen enthält, und dann auf "Alle auswählen" klickt, wird das Verb mit einer 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 Element oben in der Ansicht oder als 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 erneut initialisiert, wenn dieses Verb aufgerufen wird.

Es ist in einigen Fällen sinnvoll, eine kleine Anzahl von festen Elementen zu berücksichtigen. Zum Beispiel ist es für ein Verb wie "diff" passend, 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 abfragt. Sehen Sie sich lieber das erste Element an, und entscheiden Sie, ob es geeignet ist, Ihr Verb hinzuzufügen.

Heterogene Auswahl

Optimistische Verben werden bei Mehrfachauswahl automatisch hinzugefügt, vorausgesetzt, dass nicht geprüfte Elemente vom Verb behandelt werden können. Im Gegensatz dazu werden pessimistische Verben nicht hinzugefügt, wenn die Auswahl ungeahnte Elemente enthält, und nur in Fällen hinzugefügt werden, in denen die Anzahl der Elemente klein ist.

Spielerbezogene Verben sollten optimistisch sein und die nicht behandelten Elemente leise überspringen. Wenn das Versäumnis, auf Elemente zu reagieren, zu Datenverlust oder Verwirrung führen kann, sollte die Funktion Benutzer vor Elementen warnen, die nicht verarbeitet werden können. Beispielsweise soll das Verb "Backup" ausdrücken, 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 von dynamischen Verben

Kontextmenüs und Kontextmenühandler

Verben und Dateizuordnungen

Shortcut-Menü-Referenz