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 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 in der von ihnen ausgeführten Arbeit sehr konservativer 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 nicht für einen Aufruferthread.
  • Akzeptieren Sie nicht den Rückgabewert S_OK für kanonische Verben, die an die IContextMenu::InvokeCommand-Methode übergeben werden. Dadurch wird ein Fehler für die eigentliche Verbimplementierung aufgerufen und ein Fehlercode für kanonische Verben zurückgegeben. Wenn Sie kanonische Verben nicht unterstützen, wird ein Fehler zurückgegeben, 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 ü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 Elemente, die an ein Verb übergeben werden, 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. Es ist z. B. für ein "diff"-Verb geeignet, 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 automatisch im Mehrfachauswahlfall hinzugefügt, vorausgesetzt, dass ungeahnte 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.

Verben im Spielerstil sollten optimistisch sein und die Elemente, die nicht behandelt werden, im Hintergrund überspringen. Wenn ein Fehler bei elementen zu Datenverlust oder Verwirrung führen kann, sollte das Verb Benutzer vor Elementen warnen, die nicht verarbeitet werden können. Beispielsweise sollte ein Verb "Sicherung" 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 mit dynamischen Verben

Kontextmenüs und Kontextmenühandler

Verben und Dateizuordnungen

Kontextmenüreferenz