Freigeben über


Erweitern von Shortcut-Menüs

Das Klicken mit der rechten Maustaste auf ein Objekt bewirkt normalerweise die Anzeige eines Kontextmenüs. 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, die im 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. öffnen oder löschen, indem er den entsprechenden Befehl auswählt.

Da Kontextmenüs häufig für die Dateiverwaltung verwendet werden, stellt dies Shell eine Reihe von Standardbefehlen bereit, z. B. "Ausschneiden" und "Kopieren", die im Kontextmenü für jede Datei angezeigt werden. Beachten Sie, dass "Öffnen mit" zwar ein Standardbefehl ist, aber für einige Standarddateitypen, z. B. .wav, nicht angezeigt wird. Die folgende Abbildung des Beispielverzeichnisses "Eigene Dateien", das auch als Beispiel im Abschnitt Anpassen von Symbolen verwendet wurde, zeigt das Standard-Kontextmenü, das beim Rechtsklick auf MyDocs4.xyz angezeigt wird.

Screenshot des Standardverknüpfungsmenüs für Dateisystemobjekte

Der Grund, warum MyDocs4.xyz ein Standard-Kontextmenü anzeigt, ist, dass es sich nicht um ein Mitglied eines registrierten Dateityps handelt. Andererseits 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

Sobald ein Dateityp registriert ist, können Sie das Kontextmenü mit zusätzlichen Befehlen erweitern. Sie werden oberhalb der Standardbefehle angezeigt, wenn eine datei dieses Typs mit der rechten Maustaste geklickt wird. Obwohl die meisten der auf diese Weise hinzugefügten Befehle gängige Befehle sind, z. B. "Drucken " oder " Öffnen", können Sie beliebige Befehle hinzufügen, die ein Benutzer möglicherweise hilfreich finden kann.

Alles, was erforderlich ist, um das Kontextmenü für einen Dateityp zu erweitern, besteht darin, einen Registrierungseintrag für jeden Befehl zu erstellen. Ein komplexerer Ansatz besteht darin, einen Kontextmenühandler zu implementieren, mit dem Sie das Kontextmenü für einen Dateityp auf Dateibasis erweitern können. Weitere Informationen finden Sie unter Erstellen von Kontextmenühandlern.

Kontextmenüverben

Jeder Befehl im Kontextmenü wird in der Registrierung durch seinen verbNamen identifiziert. Diese Verben entsprechen denen, die von ShellExecuteEx beim programmgesteuerten Starten von Anwendungen verwendet werden. Weitere Informationen zur Verwendung von ShellExecuteEx finden Sie in der Diskussion zum Starten von Anwendungen.

Ein verb ist eine einfache Textzeichenfolge, die vom Shell verwendet wird, um den zugehörigen Befehl zu identifizieren. Jede verb entspricht der Befehlszeichenfolge , die zum Starten des Befehls in einem Konsolenfenster oder Batchdatei (.bat) verwendet wird. Beispielsweise startet das öffnenverb 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. Beispielsweise 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 das Element ein Leerzeichen enthält, nicht richtig analysiert. Beispielsweise startet "My Program.exe" die Anwendung ordnungsgemäß. Wenn Sie My Program.exeverwenden, versucht das System, "My" mit "Program.exe" als erstes Befehlszeilenargument zu starten. Sie sollten immer Anführungszeichen verwenden, wenn Sie Argumente wie "%1" verwenden, die von Shell zu Zeichenfolgen erweitert werden, da Sie nicht sicher sein können, dass die Zeichenfolge kein Leerzeichen enthält.

 

Verben können auch eine Anzeigezeichenfolge zugeordnet sein, die im Kontextmenü anstelle der verb Zeichenfolge selbst angezeigt wird. Die Anzeigezeichenfolge für openas lautet z. B. "Open With". Wie normale Menüzeichenfolgen, einschließlich eines kaufmännischen Und-Zeichens (&) 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 eine gewisse Sprachunabhängigkeit zu gewährleisten, definiert das System einen Standardsatz häufig verwendeter Verben, die als kanonische Verben bezeichnet werden. Eine kanonische verb kann mit jeder Sprache verwendet werden, und das System generiert automatisch eine ordnungsgemäß lokalisierte Anzeigezeichenfolge. Die Anzeigezeichenkette von openverb wird beispielsweise auf einem englischen System auf "Open" und auf einem deutschen System auf "Öffnen" festgelegt.

Die kanonischen Verben umfassen:

Wert BESCHREIBUNG
offen Öffnet die Datei oder den Ordner.
neu öffnen Öffnet die Datei oder den Ordner in einem neuen Fenster.
drucken Druckt die Datei.
erforschen Öffnet Windows Explorer mit ausgewähltem Ordner.
Suchen Öffnet das Dialogfeld "Windows Search ", in dem der Ordner als Standardmäßiger Suchspeicherort festgelegt ist.
Öffnen als Öffnet das Dialogfeld " Öffnen mit ".
Eigenschaften Öffnet das Eigenschaftenblatt des Objekts.

 

Der Printto verb ist ebenfalls kanonisch, wird jedoch niemals angezeigt. Sie ermöglicht es 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 können jedoch Befehle vorhanden sein, die Sie unterstützen möchten, aber nicht in jedem Kontextmenü angezeigt werden. Beispielsweise könnten Sie Befehle haben, die nicht häufig verwendet werden oder für erfahrene Benutzer vorgesehen sind. Aus diesem Grund können Sie auch ein oder mehrere erweiterte Verben definieren. Diese Verben sind auch 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 Verknüpfungsmenüs für einen Dateityp

Die einfachste Möglichkeit, das Kontextmenü für einen Dateityp zu erweitern, ist über die Registrierungsdatenbank. Fügen Sie dazu einen Shell Unterschlüssel unter dem Schlüssel für die ProgID der Anwendung hinzu, die dem Dateityp zugeordnet ist. Optional können Sie einen Standardwert verb für den Dateityp definieren, indem Sie ihn zum Standardwert des Shell Unterschlüssels machen.

Der Standard verb wird zuerst im Shortcut-Menü angezeigt. Der Zweck besteht darin, dem Shell ein verb bereitzustellen, das verwendet werden kann, wenn ShellExecuteEx aufgerufen wird, aber kein verb angegeben ist. Die Shell Standardeinstellung verb wird nicht unbedingt ausgewählt, wenn ShellExecuteEx in dieser Weise verwendet wird. Für ShellVersionen 5.0 und höher, die unter Windows 2000 und höher zu finden sind, verwendet die Shell die erste verb, die in der folgenden Liste verfügbar ist. Wenn keine verfügbar ist, schlägt der Vorgang fehl.

  • Das öffnen verb
  • Standardeinstellung verb
  • Der erste verb im Register
  • Das Openwith verb

Für Shell Versionen vor Version 5.0 wird das dritte Element weggelassen.

Erstellen Sie unter dem Shell Unterschlüssel einen Unterschlüssel für jeden verb , den Sie hinzufügen möchten. Jeder dieser Unterschlüssel verfügt über einen REG_SZ Wert, der auf die verbAnzeigezeichenfolge 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 verb Zeichenfolge angezeigt. Erstellen Sie für jeden verb Unterschlü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. Es verfügt nun über die Befehle Open, doit, Print und Printto im Kontextmenü, wobei doit als Standard verb verwendet wird. Das Kontextmenü sieht wie folgt aus.

Screenshot des angepassten Verknüpfungsmenü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 der Befehl "Öffnen mit" über dem ersten Trennzeichen liegt, wird er automatisch vom System erstellt und erfordert keinen Registrierungseintrag. Das System erstellt automatisch Anzeigenamen für die kanonischen Verben 'open' und 'print'. Da doit kein kanonischer verbIst, wird ihm ein Anzeigename "&Do It" zugewiesen, der durch Drücken der D-TASTE ausgewählt werden kann. Das PrintTo verb erscheint nicht im Kontextmenü, sondern ermöglicht es dem Benutzer, Dateien zu drucken, indem sie auf ein Druckersymbol gezogen werden. In diesem Beispiel stellt %1 den Dateinamen und %2 den Druckernamen dar.

Verben können durch Richtlinieneinstellungen unterdrückt werden, indem man dem Schlüssel verb einen Wert für SuppressPolicy hinzufügt. Legen Sie den Wert von SuppressionPolicy auf die Richtlinien-ID fest. Wenn die Richtlinie aktiviert ist, werden der verb und der zugehörige Kontextmenüeintrag unterdrückt. Mögliche Richtlinien-ID-Werte finden Sie in der RESTRICTIONS-Aufzählung.

Erweitern des Kontextmenüs für vordefinierte Shell Objekte

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

Eine Liste vordefinierter Objekte finden Sie im Abschnitt "Vordefinierte Shell Objekte " der Erstellung von Shell Erweiterungshandlern. Diese 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" markiert.

Registrieren einer Anwendung zum Behandeln 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 in 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 der Anwendung nicht 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 z. B. ein Befehlszeilenflagge 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\Anwendungen. 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 ein Beispielverfahren für MyProgram.exe, das einen freundlichen Namen und mehrere Elemente des Kontextmenüs definiert. Die Befehlszeichenfolgen enthalten das Flag "/a", um die Anwendung zu benachrichtigen, dass sie einen beliebigen Dateityp öffnet. 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 " im 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üpfungen, 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ü "New " einen Dateierstellungsbefehl hinzuzufügen, müssen die Dateien Ihrer Anwendung einen Dateityp zugeordnet haben. Fügen Sie einen ShellNew-Unterschlüssel unter den Schlüssel für die Dateinamenerweiterung ein. Wenn der Befehl "Neu" des Menüs "Datei" ausgewählt ist, Shell wird er dem Untermenü "Neu" hinzugefügt. Die Anzeigezeichenfolge des Befehls ist die beschreibende Zeichenfolge, die der ProgID des Programms zugewiesen ist.

Weisen Sie dem ShellNew-Unterschlüssel 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 ihn z. B. so festlegen, dass ein Assistent gestartet wird.
Daten Erstellt eine Datei mit angegebenen Daten. Daten sind ein REG_BINARY Wert mit den Daten der Datei. Daten werden ignoriert, wenn entweder NullFile oder FileName angegeben wird.
Dateiname 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.
Null-Datei Erstellt eine leere Datei. NullFile wird keinem 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 für Dateitypen und Anpassen von Symbolen verwendet wird. Es verfügt jetzt über einen Befehl , MyProgram Application. Wenn ein Benutzer "MyProgram Application" aus dem Untermenü " New " auswählt, erstellt die Shell Datei "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