Erweitern von Kontextmenüs

Wenn Sie mit der rechten Maustaste auf ein Objekt klicken, wird normalerweise ein Kontextmenü angezeigt. Dieses Menü enthält eine Liste von Befehlen, die der Benutzer auswählen kann, um verschiedene Aktionen für das Objekt auszuführen. Dieser Abschnitt enthält eine Einführung in Kontextmenüs für Dateisystemobjekte.

Weitere Informationen finden Sie hier:

Kontextmenüs für Dateisystemobjekte

Wenn ein Benutzer mit der rechten Maustaste auf ein Objekt klickt, z. B. eine Datei, das in Windows Explorer oder auf dem Desktop angezeigt wird, wird ein Kontextmenü mit einer Liste von Befehlen angezeigt. Der Benutzer kann dann eine Aktion für die Datei ausführen, z. B. sie öffnen oder löschen, indem er den entsprechenden Befehl auswählt.

Da Kontextmenüs häufig für die Dateiverwaltung verwendet werden, stellt die Shell eine Reihe von Standardbefehlen bereit, z. B. Ausschneiden und Kopieren, die im Kontextmenü für jede Datei angezeigt werden. Beachten Sie, dass open with zwar ein Standardbefehl ist, aber für einige Standarddateitypen, z. B. WAV, nicht angezeigt wird. Die folgende Abbildung des Beispielverzeichnisses "Eigene Dokumente", das auch als Beispiel für das Anpassen von Symbolen verwendet wurde, zeigt ein Standard-Kontextmenü, das durch Klicken mit der rechten Maustaste MyDocs4.xyz angezeigt wurde.

Screenshot des Standard-Kontextmenüs für Dateisystemobjekte

Der Grund dafür, dass MyDocs4.xyz ein Standard-Kontextmenü anzeigt, ist, dass es kein Mitglied eines registrierten Dateityps ist. Auf der anderen Seite ist .txt ein registrierter Dateityp. Wenn Sie mit der rechten Maustaste auf eine der .txt-Dateien klicken, wird stattdessen ein Kontextmenü mit zwei zusätzlichen Befehlen im oberen Abschnitt angezeigt: Öffnen und Drucken.

Screenshot des angepassten Kontextmenüs für Dateisystemobjekte

Nachdem ein Dateityp registriert wurde, können Sie das Kontextmenü mit zusätzlichen Befehlen erweitern. Sie werden oberhalb der Standardbefehle angezeigt, wenn mit der rechten Maustaste auf eine Datei dieses Typs geklickt wird. Obwohl es sich bei den meisten auf diese Weise hinzugefügten Befehlen um gängige Befehle handelt, z. B. Drucken oder Öffnen, können Sie alle Befehle hinzufügen, die ein Benutzer möglicherweise hilfreich findet.

Zum Erweitern des Kontextmenüs für einen Dateityp müssen Sie nur einen Registrierungseintrag für jeden Befehl erstellen. Ein komplexerer Ansatz ist die Implementierung eines Kontextmenühandlers, mit dem Sie das Kontextmenü für einen Dateityp dateiweise erweitern können. Weitere Informationen finden Sie unter Erstellen von Kontextmenühandlern.

Kontextmenüverben

Jeder Befehl im Kontextmenü wird in der Registrierung anhand seines Verbs identifiziert. Diese Verben sind identisch mit denen, die von ShellExecuteEx beim programmgesteuerten Starten von Anwendungen verwendet werden. Weitere Informationen zur Verwendung von ShellExecuteEx finden Sie in der Diskussion unter Starten von Anwendungen.

Ein Verb ist eine einfache Textzeichenfolge, die von der Shell verwendet wird, um den zugeordneten Befehl zu identifizieren. Jedes Verb entspricht der Befehlszeichenfolge , die zum Starten des Befehls in einem Konsolenfenster oder einer Batchdatei (.bat) verwendet wird. Beispielsweise startet das geöffnete Verb normalerweise ein Programm, um eine Datei zu öffnen. Die Befehlszeichenfolge sieht in der Regel wie folgt aus:

"My Program.exe" "%1"

"%1" ist der Standardplatzhalter für einen Befehlszeilenparameter, der mit dem Dateinamen bereitgestellt wird. Für instance kann eine bestimmte Seite angegeben werden, die in einer Registerkartenansicht angezeigt werden soll.

Hinweis

Wenn ein Element der Befehlszeichenfolge Leerzeichen enthält oder enthalten kann, muss es in Anführungszeichen eingeschlossen werden. Andernfalls wird das Element, wenn es ein Leerzeichen enthält, nicht ordnungsgemäß analysiert. Für instance startet "My Program.exe" die Anwendung ordnungsgemäß. Wenn Sie My Program.exe verwenden, versucht das System, "My" mit "Program.exe" als erstes Befehlszeilenargument zu starten. Sie sollten immer Anführungszeichen mit Argumenten wie "%1" verwenden, die von der Shell auf Zeichenfolgen erweitert werden, da Sie nicht sicher sein können, dass die Zeichenfolge kein Leerzeichen enthält.

 

Verben kann auch eine Anzeigezeichenfolge zugeordnet sein, die im Kontextmenü anstelle der Verbzeichenfolge selbst angezeigt wird. Die Anzeigezeichenfolge für openas lautet beispielsweise Open With. Wie normale Menüzeichenfolgen, einschließlich eines amper und (&) in der Anzeigezeichenfolge, ermöglicht die Tastaturauswahl des Befehls.

Kanonische Verben

Im Allgemeinen sind Anwendungen dafür verantwortlich, lokalisierte Anzeigezeichenfolgen für die von ihnen definierten Verben bereitzustellen. Um jedoch ein gewisses Maß an Sprachunabhängigkeit zu gewährleisten, definiert das System einen Standardsatz von häufig verwendeten Verben, die als kanonische Verben bezeichnet werden. Ein kanonisches Verb kann mit jeder Sprache verwendet werden, und das System generiert automatisch eine ordnungsgemäß lokalisierte Anzeigezeichenfolge. Für instance wird die Anzeigezeichenfolge des geöffneten Verbs auf einem englischen System auf Öffnen und auf einem deutschen System auf Öffnen festgelegt.

Die kanonischen Verben umfassen:

Wert BESCHREIBUNG
open Öffnet die Datei oder den Ordner.
opennew Öffnet die Datei oder den Ordner in einem neuen Fenster.
print Gibt die Datei aus.
explore Öffnet Windows Explorer mit ausgewähltem Ordner.
Suchen Öffnet das Dialogfeld Windows Search , in dem der Ordner als Standardsuchspeicherort festgelegt ist.
openas Öffnet das Dialogfeld Öffnen mit .
properties Öffnet das Eigenschaftenblatt des Objekts.

 

Das Verb printto ist ebenfalls kanonisch, wird aber nie angezeigt. Es ermöglicht dem Benutzer, eine Datei zu drucken, indem sie auf ein Druckerobjekt gezogen wird.

Erweiterte Verben

Wenn der Benutzer mit der rechten Maustaste auf ein Objekt klickt, enthält das Kontextmenü alle normalen Verben. Es kann jedoch Befehle geben, die Sie unterstützen möchten, aber nicht in jedem Kontextmenü angezeigt werden. Sie können beispielsweise Befehle verwenden, die nicht häufig verwendet werden oder für erfahrene Benutzer bestimmt sind. Aus diesem Grund können Sie auch ein oder mehrere erweiterte Verben definieren. Diese Verben sind ebenfalls Zeichenfolgen und ähneln normalen Verben. Sie unterscheiden sich von normalen Verben durch die Art und Weise, wie sie registriert werden. Um Zugriff auf die Befehle zu erhalten, die erweiterten Verben zugeordnet sind, muss der Benutzer mit der rechten Maustaste auf ein Objekt klicken, während er die UMSCHALTTASTE drückt. Die erweiterten Verben werden dann zusammen mit den normalen Verben angezeigt.

Erweitern des Kontextmenüs für einen Dateityp

Die einfachste Möglichkeit, das Kontextmenü für einen Dateityp zu erweitern, ist die Registrierung. Fügen Sie hierzu einen Shell-Unterschlüssel unterhalb des Schlüssels für die ProgID der Anwendung hinzu, die dem Dateityp zugeordnet ist. Optional können Sie ein Standardverb für den Dateityp definieren, indem Sie ihn zum Standardwert des Shell-Unterschlüssels machen.

Das Standardverb wird zuerst im Kontextmenü angezeigt. Ihr Zweck besteht darin, der Shell ein Verb bereitzustellen, das sie verwenden kann, wenn ShellExecuteEx aufgerufen wird, aber kein Verb angegeben wird. Die Shell wählt nicht unbedingt das Standardverb aus, wenn ShellExecuteEx auf diese Weise verwendet wird. Für Shell-Versionen 5.0 und höher, die unter Windows 2000 und höher zu finden sind, verwendet die Shell das erste verfügbare Verb aus der folgenden Liste. Wenn keine verfügbar ist, schlägt der Vorgang fehl.

  • Das offene Verb
  • Das Standardverb
  • Das erste Verb in der Registrierung
  • Das Openwith-Verb

Bei Shell-Versionen vor Version 5.0 lassen Sie das dritte Element aus.

Erstellen Sie unterhalb des Shell-Unterschlüssels einen Unterschlüssel für jedes Verb, das Sie hinzufügen möchten. Jeder dieser Unterschlüssel verfügt über einen REG_SZ Wert, der auf die Anzeigezeichenfolge des Verbs festgelegt ist. Sie können die Anzeigezeichenfolge für kanonische Verben weglassen, da das System automatisch eine ordnungsgemäß lokalisierte Zeichenfolge anzeigt. Wenn Sie die Anzeigezeichenfolge für nichtcanonische Verben weglassen, wird die Verbzeichenfolge angezeigt. Erstellen Sie für jeden Verbunterschlüssel einen Befehlsunterschlüssel , wobei der Standardwert auf die Befehlszeichenfolge festgelegt ist.

Die folgende Abbildung zeigt ein Kontextmenü für den MYP-Dateityp, der in Dateitypen und Anpassen von Symbolen verwendet wird. Das Kontextmenü enthält nun "open", "doit", "print" und "printtoto", wobei doit das Standardverb ist. Das Kontextmenü sieht wie folgt aus.

Screenshot des angepassten Kontextmenüs

Die Registrierungseinträge, die zum Erweitern des Kontextmenüs in der vorherigen Abbildung verwendet werden, sind:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4

Obwohl sich der Befehl Öffnen mit über dem ersten Trennzeichen befindet, wird er automatisch vom System erstellt und erfordert keinen Registrierungseintrag. Das System erstellt automatisch Anzeigenamen für die kanonischen Verben zum Öffnen und Drucken. Da doit kein kanonisches Verb ist, wird ihm der Anzeigename "&Do It" zugewiesen, der durch Drücken der Taste D ausgewählt werden kann. Das Verb printto wird nicht im Kontextmenü angezeigt, ermöglicht es dem Benutzer jedoch, Dateien zu drucken, indem er sie auf einem Druckersymbol ablegen. In diesem Beispiel stellt %1 den Dateinamen und %2 den Druckernamen dar.

Verben können über Richtlinieneinstellungen unterdrückt werden, indem dem Schlüssel des Verbs ein SuppressionPolicy-Wert hinzugefügt wird. Legen Sie den Wert von SuppressionPolicy auf die Richtlinien-ID fest. Wenn die Richtlinie aktiviert ist, werden das Verb und der zugehörige Kontextmenüeintrag unterdrückt. Mögliche Richtlinien-ID-Werte finden Sie in der RESTRICTIONS-Enumeration .

Erweitern des Kontextmenüs für vordefinierte Shellobjekte

Viele vordefinierte Shellobjekte verfügen über Kontextmenüs, die erweitert werden können. Registrieren Sie den Befehl auf die gleiche Weise wie typische Dateitypen, aber verwenden Sie den Namen des vordefinierten Objekts als Dateinamennamen.

Eine Liste der vordefinierten Objekte finden Sie im Abschnitt Vordefinierte Shellobjekte unter Erstellen von Handlern für Shellerweiterungen. Die vordefinierten Shell-Objekte, deren Kontextmenüs durch Hinzufügen von Verben in der Registrierung erweitert werden können, werden in der Tabelle mit dem Wort "Verb" gekennzeichnet.

Registrieren einer Anwendung zur Behandlung beliebiger Dateitypen

In den vorherigen Abschnitten dieses Dokuments wurde erläutert, wie Kontextmenüelemente für einen bestimmten Dateityp definiert werden. Durch das Definieren des Kontextmenüs können Sie unter anderem angeben, wie die zugeordnete Anwendung ein Element des Dateityps öffnet. Wie unter Dateitypen erläutert, können Anwendungen jedoch auch eine separate Standardprozedur registrieren, die verwendet werden soll, wenn ein Benutzer versucht, ihre Anwendung zum Öffnen eines Dateityps zu verwenden, den Sie nicht der Anwendung zugeordnet haben. Dieses Thema wird hier erläutert, da Sie die Standardprozedur auf die gleiche Weise registrieren, wie Sie Kontextmenüelemente registrieren.

Das Standardverfahren dient zwei grundlegenden Zwecken. Eine besteht darin, anzugeben, wie Ihre Anwendung aufgerufen werden soll, um einen beliebigen Dateityp zu öffnen. Sie können für instance ein Befehlszeilenflag verwenden, um anzugeben, dass ein unbekannter Dateityp geöffnet wird. Der andere Zweck besteht darin, die verschiedenen Merkmale eines Dateityps zu definieren, z. B. die Kontextmenüelemente und das Symbol. Wenn ein Benutzer Ihre Anwendung einem zusätzlichen Dateityp zuordnet, weist dieser Typ diese Merkmale auf. Wenn der zusätzliche Dateityp zuvor einer anderen Anwendung zugeordnet war, ersetzen diese Merkmale die Originale.

Um die Standardprozedur zu registrieren, platzieren Sie die gleichen Registrierungsschlüssel, die Sie für die ProgID Ihrer Anwendung erstellt haben, unter dem Unterschlüssel der Anwendung HKEY_CLASSES_ROOT\Applications. Sie können auch einen FriendlyAppName-Wert einschließen, um dem System einen Anzeigenamen für Ihre Anwendung bereitzustellen. Der Anzeigename der Anwendung kann auch aus der ausführbaren Datei extrahiert werden, aber nur, wenn der FriendlyAppName-Wert nicht vorhanden ist. Das folgende Registrierungsfragment zeigt eine Beispielstandardprozedur für MyProgram.exe, die einen Anzeigenamen und mehrere Kontextmenüelemente definiert. Die Befehlszeichenfolgen enthalten das Flag /a, um die Anwendung zu benachrichtigen, dass ein beliebiger Dateityp geöffnet wird. Wenn Sie einen DefaultIcon-Unterschlüssel einschließen, sollten Sie ein generisches Symbol verwenden.

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         shell
            open
               command
                  (Default) = C:\MyDir\MyProgram.exe /a "%1"
            print
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1"
            printto
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2" %3 %4

Erweitern des neuen Untermenüs

Wenn ein Benutzer das Menü Datei in Windows Explorer öffnet, lautet der erste Befehl Neu. Wenn Sie diesen Befehl auswählen, wird ein Untermenü angezeigt. Standardmäßig enthält sie zwei Befehle, Ordner und Verknüpfung, mit denen Benutzer Unterordner und Verknüpfungen erstellen können. Dieses Untermenü kann erweitert werden, um Dateierstellungsbefehle für jeden Dateityp einzuschließen.

Um dem Untermenü "Neu " einen Dateierstellungsbefehl hinzuzufügen, müssen die Dateien Ihrer Anwendung über einen Dateityp verfügen, der ihnen zugeordnet ist. Schließen Sie einen ShellNeuen Unterschlüssel unter dem Schlüssel für die Dateinamenerweiterung ein. Wenn der Befehl Neu im Menü Datei ausgewählt ist, fügt die Shell ihn dem Untermenü Neu hinzu. Die Anzeigezeichenfolge des Befehls ist die beschreibende Zeichenfolge, die der ProgID des Programms zugewiesen ist.

Weisen Sie dem Unterschlüssel ShellNeu einen oder mehrere Datenwerte zu, um die Dateierstellungsmethode anzugeben. Die verfügbaren Werte folgen.

Wert BESCHREIBUNG
Befehl Führt eine Anwendung aus. Dies ist ein REG_SZ Wert, der den Pfad der auszuführenden Anwendung angibt. Sie können beispielsweise festlegen, dass ein Assistent gestartet wird.
Daten Erstellt eine Datei, die die angegebenen Daten enthält. Daten sind ein REG_BINARY Wert mit den Daten der Datei. Daten werden ignoriert, wenn entweder NullFile oder FileName angegeben ist.
FileName Erstellt eine Datei, die eine Kopie einer angegebenen Datei ist. FileName ist ein REG_SZ Wert, der auf den vollqualifizierten Pfad der zu kopierenden Datei festgelegt ist.
NullFile Erstellt eine leere Datei. NullFile wird kein Wert zugewiesen. Wenn NullFile angegeben ist, werden die Werte Data und FileName ignoriert.

 

Die folgende Abbildung zeigt das Untermenü New für den .myp-Dateityp, der als Beispiel unter Dateitypen und Anpassen von Symbolen verwendet wird. Sie verfügt jetzt über den Befehl MyProgram Application. Wenn ein Benutzer im Untermenü "Neu" myProgram Application auswählt, erstellt die Shell eine Datei namens "New MyProgram Application.myp" und übergibt sie an MyProgram.exe.

Screenshot des benutzerdefinierten neuen Menüs

Der Registrierungseintrag lautet jetzt wie folgt:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4