Delen via


Snelmenuhandlers maken

Handlers van snelmenu's, ook wel contextmenuhandlers of werkwoordhandlers genoemd, zijn een type handler voor bestandstypen. Deze handlers kunnen worden geïmplementeerd op een manier die ervoor zorgt dat ze in hun eigen proces of in de verkenner of andere processen van derden worden geladen. Wees voorzichtig bij het maken van in-process handlers, omdat deze schade kunnen toebrengen aan het proces dat hen laadt.

Notitie

Er zijn speciale overwegingen voor 64-bits versies van Windows bij het registreren van handlers die in de context van 32-bits toepassingen werken: wanneer deze worden aangesproken in de context van een toepassing met een andere bitspecificatie, leidt het WOW64-subsysteem de toegang tot het bestandssysteem om naar sommige paden. Als uw .exe handler is opgeslagen in een van deze paden, is deze niet toegankelijk in deze context. Sla uw .exe daarom op in een pad dat niet wordt omgeleid, of sla een stub-versie van uw .exe op waarmee de echte versie wordt gestart.

Dit onderwerp is als volgt ingedeeld:

Canonieke werkwoorden

Toepassingen zijn over het algemeen verantwoordelijk voor het leveren van gelokaliseerde weergavetekenreeksen voor de werkwoorden die ze definiëren. Om een zekere mate van taalonafhankelijkheid te bieden, definieert het systeem echter een standaardset veelgebruikte werkwoorden die canonieke werkwoorden worden genoemd. Een canoniek werkwoord wordt nooit weergegeven aan de gebruiker en kan worden gebruikt met elke ui-taal. Het systeem gebruikt de canonieke naam om automatisch een correct gelokaliseerde weergavetekenreeks te genereren. De weergavetekenreeks van het open werkwoord is bijvoorbeeld ingesteld op Open op een Engels systeem en op het Duitse equivalent op een Duits systeem.

Canonieke werkwoord Beschrijving
Openen Hiermee opent u het bestand of de map.
Opennew Hiermee opent u het bestand of de map in een nieuw venster.
Afdrukken Het bestand afdrukken.
Printto Hiermee kan de gebruiker een bestand afdrukken door het naar een printerobject te slepen.
Exploreren Hiermee opent u Windows Verkenner met de map geselecteerd.
Eigenschappen Hiermee opent u het eigenschappenvenster van het object.

Notitie

De Printto werkwoord is ook canoniek, maar wordt nooit weergegeven. Met de opname ervan kan de gebruiker een bestand afdrukken door het naar een printerobject te slepen.

Snelmenuhandlers kunnen hun eigen canonieke werkwoorden leveren via IContextMenu::GetCommandString met GCS_VERBWof GCS_VERBA. Het systeem gebruikt de canonieke werkwoorden als de tweede parameter (lpOperation) die wordt doorgegeven aan ShellExecuteen is de CMINVOKECOMMANDINFO. HetlpVerb attribuut wordt doorgegeven aan de methode IContextMenu::InvokeCommand.

Uitgebreide werkwoorden

Wanneer de gebruiker met de rechtermuisknop op een object klikt, worden in het snelmenu de standaardwoorden weergegeven. Mogelijk wilt u opdrachten toevoegen en ondersteunen in sommige snelmenu's die niet in elk snelmenu worden weergegeven. U kunt bijvoorbeeld opdrachten hebben die niet vaak worden gebruikt of die zijn bedoeld voor ervaren gebruikers. Daarom kunt u ook een of meer uitgebreide werkwoorden definiëren. Deze werkwoorden zijn vergelijkbaar met normale werkwoorden, maar worden onderscheiden van normale werkwoorden op de manier waarop ze worden geregistreerd. Als u toegang wilt hebben tot uitgebreide werkwoorden, moet de gebruiker met de rechtermuisknop op een object klikken terwijl hij op de Shift-toets drukt. Wanneer de gebruiker dit doet, worden de uitgebreide werkwoorden weergegeven naast de standaardwoorden.

U kunt het register gebruiken om een of meer uitgebreide werkwoorden te definiëren. De bijbehorende opdrachten worden alleen weergegeven wanneer de gebruiker met de rechtermuisknop op een object klikt terwijl hij ook op de Shift-toets drukt. Als u een werkwoord als uitgebreid wilt definiëren, voegt u een 'uitgebreide' REG_SZ waarde toe aan de subsleutel van het werkwoord. Aan de waarde mogen geen gegevens zijn gekoppeld.

Werkwoorden alleen voor programmatische toegang

Deze werkwoorden worden nooit weergegeven in een contextmenu. U krijgt toegang tot deze door gebruik te maken van ShellExecuteEx en het veld lpVerb van de parameter pExecInfo (een SHELLEXECUTEINFO-object) op te geven. Als u alleen een werkwoord als programmatische toegang wilt definiëren, voegt u een 'ProgrammaticAccessOnly'-REG_SZ waarde toe aan de subsleutel van het werkwoord. Aan de waarde mogen geen gegevens zijn gekoppeld.

U kunt het register gebruiken om een of meer uitgebreide werkwoorden te definiëren. De bijbehorende opdrachten worden alleen weergegeven wanneer de gebruiker met de rechtermuisknop op een object klikt terwijl hij ook op de Shift-toets drukt. Als u een werkwoord als uitgebreid wilt definiëren, voegt u een 'uitgebreide' REG_SZ waarde toe aan de subsleutel van het werkwoord. Aan de waarde mogen geen gegevens zijn gekoppeld.

Een snelmenu aanpassen met statische werkwoorden

Nadat u een statisch of dynamisch werkwoord voor uw snelmenu hebt gekozen, kunt u het snelmenu voor een bestandstype uitbreiden door een statisch werkwoord voor het bestandstype te registreren. Voeg hiervoor een Shell subsleutel toe onder de subsleutel voor de ProgID van de toepassing die is gekoppeld aan het bestandstype. U kunt desgewenst een standaardwerkwoord voor het bestandstype definiëren door deze de standaardwaarde te maken van de Shell-subsleutel.

De standaard werkwoord wordt als eerste weergegeven in het snelmenu. Het doel is om de Shell te voorzien van een werkwoord dat kan worden gebruikt wanneer de ShellExecuteEx- functie wordt aangeroepen, maar er is geen werkwoord opgegeven. De Shell selecteert niet noodzakelijkerwijs het standaardwerkwoord wanneer ShellExecuteEx- op deze manier wordt gebruikt.

De Shell maakt gebruik van het eerste beschikbare werkwoord in de volgende volgorde:

  1. Het standaardwoord
  2. Het eerste werkwoord in het register, als de werkwoordvolgorde is opgegeven
  3. Open werkwoord
  4. De Openen met werkwoord

Als geen van de vermelde werkwoorden beschikbaar is, mislukt de bewerking.

Maak één subsleutel voor elk werkwoord dat u wilt toevoegen onder de Shell-subsleutel. Elk van deze subsleutels moet een REG_SZ waarde hebben die is ingesteld op de weergavetekenreeks van het werkwoord (gelokaliseerde tekenreeks). Voor elke werkwoord-subsleutel creëert u een opdrachtsubsleutel met de standaardwaarde die is ingesteld op de opdrachtregel voor het activeren van de items. Voor canonieke werkwoorden, zoals Open en Print, kunt u de weergavetekenreeks weglaten omdat in het systeem automatisch een correct gelokaliseerde tekenreeks wordt weergegeven. Als u de weergavetekenreeks weglaat, wordt de werkwoordreeks weergegeven voor niet-canonische werkwoorden.

In het volgende registervoorbeeld ziet u dat:

  • Omdat Doit geen canoniek werkwoord is, wordt er een weergavenaam toegewezen die kan worden geselecteerd door op de D-toets te drukken.
  • De Printto werkwoord wordt niet weergegeven in het snelmenu. Door de opname in het register kan de gebruiker echter bestanden afdrukken door ze neer te zetten op een printerpictogram.
  • Voor elk werkwoord wordt één subsleutel weergegeven. %1 vertegenwoordigt de bestandsnaam en %2 de printernaam.
HKEY_CLASSES_ROOT
   .myp-ms
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = My Program Application
      Shell
         (Default) = doit
         doit
            (Default) = &Do It
            command
               (Default) = c:\MyDir\MyProgram.exe /d "%1"
         open
            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"

In het volgende diagram ziet u de uitbreiding van het snelmenu in overeenstemming met de bovenstaande registervermeldingen. Dit snelmenu bevat de werkwoorden Open, Doen, en Afdrukken op zijn menu, met Doen als standaardwerkwoord.

schermafbeelding van het standaard snelmenu voor werkwoorden

Uw handler activeren met behulp van de IDropTarget-interface

Dynamic Data Exchange (DDE) is afgeschaft; gebruik in plaats daarvan IDropTarget. IDropTarget is robuuster en biedt betere activeringsondersteuning omdat er COM-activering van de handler wordt gebruikt. In het geval van meerdere itemselectie is IDropTarget- niet onderworpen aan de buffergroottebeperkingen die zijn gevonden in zowel DDE als de CreateProcess-. Items worden ook doorgegeven aan de toepassing als een gegevensobject dat kan worden geconverteerd naar een itemmatrix met behulp van de functie SHCreateShellItemArrayFromDataObject. Dit is eenvoudiger en verliest geen naamruimtegegevens zoals wanneer het item wordt geconverteerd naar een pad voor opdrachtregel- of DDE-protocollen.

Zie Waargenomen typen en toepassingsregistratievoor meer informatie over IDropTarget-- en Shell-query's voor bestandskoppelingskenmerken.

De positie en volgorde van statische werkwoorden opgeven

Normaal gesproken worden werkwoorden geordend in een snelmenu op basis van hoe ze worden opgesomd; opsomming is eerst gebaseerd op de volgorde van de koppelingsmatrix en vervolgens op de volgorde van de items in de koppelingsmatrix, zoals gedefinieerd door de sorteervolgorde van het register.

Werkwoorden kunnen worden geordend door de standaardwaarde van de Shell-subsleutel voor de koppelingsvermelding op te geven. Deze standaardwaarde kan één item bevatten, dat wordt weergegeven op de bovenste positie van het snelmenu, of een lijst met items gescheiden door spaties of komma's. In het laatste geval is het eerste item in de lijst het standaarditem en worden de andere werkwoorden direct eronder weergegeven in de opgegeven volgorde.

De volgende registervermelding produceert bijvoorbeeld snelmenuopdrachten in de volgende volgorde:

  1. Beeldscherm
  2. Gadgets
  3. Personalisatie
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

Op dezelfde manier produceert de volgende registervermelding snelmenuopdrachten in de volgende volgorde:

  1. Personalisatie
  2. Gadgets
  3. Beeldscherm
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

Werkwoorden boven of onder aan het menu plaatsen

Het volgende registerkenmerk kan worden gebruikt om een werkwoord boven of onder aan het menu te plaatsen. Als er meerdere werkwoorden zijn die dit kenmerk opgeven, krijgt de laatste om dit te doen prioriteit:

Position=Top | Bottom 

Statische cascade-menu's maken

In Windows 7 en hoger wordt trapsgewijze menu-implementatie ondersteund via registerinstellingen. Vóór Windows 7 was het maken van trapsgewijze menu's alleen mogelijk via de implementatie van de IContextMenu interface. In Windows 7 en hoger moet u alleen gebruikmaken van COM-oplossingen op basis van code wanneer de statische methoden onvoldoende zijn.

De volgende schermafbeelding bevat een voorbeeld van een trapsgewijze menu.

schermafbeelding met een voorbeeld van een trapsgewijs menu

In Windows 7 en hoger zijn er drie manieren om trapsgewijze menu's te maken:

Trapsgewijze menu's maken met de registervermelding SubOpdrachten

In Windows 7 en hoger kunt u de vermelding SubOpdrachten gebruiken om trapsgewijze menu's te maken met behulp van de volgende procedure.

Een trapsgewijs menu maken met behulp van de vermelding SubOpdrachten

  1. Maak een subsleutel onder HKEY_CLASSES_ROOT\ProgID\shell om uw trapsgewijze menu weer te geven. In dit voorbeeld geven we deze subsleutel de naam CascadeTest. Zorg ervoor dat de standaardwaarde van de subsleutel CascadeTest leeg is en wordt weergegeven als (waarde niet ingesteld).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. Voeg aan de subsleutel CascadeTest een MUIVerb-vermelding van het type REG_SZ toe en geef deze de tekst die als naam in het contextmenu wordt weergegeven. In dit voorbeeld wijzen we het toe aan 'Test Cascade Menu'.

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. Voeg aan uw CascadeTest subsleutel een SubCommands-invoer toe van het type REG_SZ waaraan een lijst is toegewezen, gescheiden door puntkomma's, van de werkwoorden die in het menu worden weergegeven, in de weergegeven volgorde. Hier wijzen we bijvoorbeeld een aantal door het systeem geleverde werkwoorden toe:

    HKEY_CLASSES_ROOT
       *
          Shell
             CascadeTest
                SubCommands
                Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
    
  4. Implementeer aangepaste werkwoorden met behulp van een van de implementatiemethoden voor statische werkwoorden en vermeld ze onder de subsleutel CommandStore, zoals in dit voorbeeld voor een fictief werkwoord VerbName:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      CommandStore
                         Shell
                            VerbName
                            command
                               (Default) = notepad.exe %1
    

Notitie

Deze methode heeft het voordeel dat de aangepaste werkwoorden eenmaal kunnen worden geregistreerd en opnieuw kunnen worden gebruikt door de werkwoordnaam onder de vermelding Subopdrachten weer te gegeven. Het vereist echter dat de toepassing gemachtigd is om het register onder HKEY_LOCAL_MACHINEte wijzigen.

 

Trapsgewijze menu's maken met de registervermelding ExtendedSubCommandsKey

In Windows 7 en hoger kunt u de vermelding ExtendedSubCommandKey gebruiken om uitgebreide trapsgewijze menu's te maken: trapsgewijze menu's binnen trapsgewijze menu's.

De volgende schermafbeelding is een voorbeeld van een uitgebreid trapsgewijs menu.

schermafbeelding met uitgebreid trapsgewijs menu voor apparaten

Omdat HKEY_CLASSES_ROOT een combinatie is van HKEY_CURRENT_USER en HKEY_LOCAL_MACHINE, kunt u aangepaste werkwoorden registreren onder de subsleutel HKEY_CURRENT_USER\Software\Classes. Het belangrijkste voordeel hiervan is dat verhoogde machtigingen niet vereist zijn. Andere bestandskoppelingen kunnen deze hele set werkwoorden ook opnieuw gebruiken door dezelfde ExtendedSubCommandsKey-subsleutel op te geven. Als u deze set werkwoorden niet opnieuw hoeft te gebruiken, kunt u de werkwoorden onder het bovenliggende item weergeven, maar ervoor zorgen dat de standaardwaarde van het bovenliggende item leeg is.

Een trapsgewijs menu maken met behulp van een ExtendedSubCommandsKey-vermelding

  1. Maak een subsleutel onder HKEY_CLASSES_ROOT\ProgID\shell om uw trapsgewijze menu weer te geven. In dit voorbeeld geven we deze subsleutel de naam CascadeTest2. Zorg ervoor dat de standaardwaarde van de subsleutel CascadeTest leeg is en wordt weergegeven als (waarde niet ingesteld).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. Voeg aan de subsleutel CascadeTest een MUIVerb-vermelding van het type REG_SZ toe en wijs daar de tekst aan toe die als naam in het snelmenu wordt weergegeven. In dit voorbeeld wijzen we het toe aan 'Test Cascade Menu'.

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. Voeg onder de CascadeTest subsleutel die u hebt gemaakt, een ExtendedSubCommandsKey subsleutel toe en voeg vervolgens de subopdrachten voor het document toe (van REG_SZ type); bijvoorbeeld:

    HKEY_CLASSES_ROOT
       txtfile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Layout
                   Properties
                   Select all
    

    Zorg ervoor dat de standaardwaarde van de Test Cascade Menu 2-subsleutel leeg is en wordt weergegeven als (waarde niet ingesteld).

  4. Vul de subverbs in met behulp van een van de volgende statische werkwoord-implementaties. Houd er rekening mee dat de subsleutel CommandFlags EXPCMDFLAGS-waarden vertegenwoordigt. Als u een scheidingsteken wilt toevoegen voor of na het cascade-menu-item, gebruik dan ECF_SEPARATORBEFORE (0x20) of ECF_SEPARATORAFTER (0x40). Zie IExplorerCommand::GetFlagsvoor een beschrijving van deze markeringen voor Windows 7 en hoger. ECF_SEPARATORBEFORE werkt alleen voor de menu-items op het hoogste niveau. MUIVerb is van het type REG_SZen CommandFlags is van het type REG_DWORD.

    HKEY_CLASSES_ROOT
       txtile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Shell
                      cmd1
                         MUIVerb = Notepad
                         command
                            (Default) = %SystemRoot%\system32\notepad.exe %1
                      cmd2
                         MUIVerb = Wordpad
                         CommandFlags = 0x20
                         command
                            (Default) = "C:\Program Files\Windows NT\Accessories\wordpad.exe" %1
    

De volgende schermafbeelding is een afbeelding van de vorige voorbeelden van registersleutelvermeldingen.

schermafbeelding met een voorbeeld van een trapsgewijze menu met opties van kladblok en wordpad

Trapsgewijze menu's maken met de interface IExplorerCommand

Een andere optie voor het toevoegen van werkwoorden aan een trapsgewijze menu is via IExplorerCommand::EnumSubCommands. Met deze methode kunnen gegevensbronnen die hun opdrachtmoduleopdrachten leveren via IExplorerCommandProvider deze opdrachten gebruiken als werkwoorden in een snelmenu. In Windows 7 en hoger kunt u dezelfde werkwoord-implementatie bieden met behulp van IExplorerCommand- zoals u kunt met IContextMenu-.

De volgende twee schermafbeeldingen illustreren het gebruik van trapsgewijze menu's in de map Apparaten.

Schermopname met een voorbeeld van een trapsgewijze menu in de map apparaten.

In de volgende schermafbeelding ziet u een andere implementatie van een trapsgewijs menu in de map Apparaten.

schermafbeelding met een voorbeeld van een trapsgewijze menu in de map apparaten

Notitie

Omdat IExplorerCommand alleen activering in proces ondersteunt, wordt het aanbevolen voor gebruik door Shell-gegevensbronnen die de implementatie tussen opdrachten en snelmenu's moeten delen.

 

Dynamisch gedrag voor statische werkwoorden verkrijgen met behulp van geavanceerde querysyntaxis

Advanced Query Syntaxis (AQS) kan een voorwaarde uitdrukken die wordt geëvalueerd met behulp van eigenschappen van het item waarvoor het werkwoord wordt geïnstantieerd. Dit systeem werkt alleen met snelle eigenschappen. Dit zijn eigenschappen die de Shell-gegevensbron snel rapporteert door SHCOLSTATE_SLOW niet terug te geven van IShellFolder2::GetDefaultColumnState.

Windows 7 en hoger ondersteunen canonieke waarden die problemen bij gelokaliseerde builds voorkomen. De volgende canonieke syntaxis is vereist voor gelokaliseerde builds om te profiteren van deze Uitbreiding van Windows 7.

System.StructuredQueryType.Boolean#True

In de volgende voorbeeldregistervermelding:

  • De AppliesTo-waarde bepaalt of het werkwoord wordt weergegeven of verborgen.
  • Met de waarde DefaultAppliesTo bepaalt u welke werkwoord de standaardinstelling is.
  • De hasLUAShield-waarde bepaalt of een UAC-schild (User Account Control) wordt weergegeven.

In dit voorbeeld maakt de waarde DefaultAppliesTo dit werkwoord de standaardwaarde voor elk bestand met het woord 'exampleText1' in de bestandsnaam. De waarde AppliesTo maakt het werkwoord mogelijk voor elk bestand met 'exampleText1' in de naam. De HasLUAShield waarde geeft het schild voor bestanden weer met 'exampleText2' in de naam.

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            DefaultAppliesTo = System.ItemName:"exampleText1"
            HasLUAShield = System.ItemName:"exampleText2"
            AppliesTo = System.ItemName:"exampleText1"

Voeg de -commando-subsleutel en een waarde toe:

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            Command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Zie in het Windows 7-register HKEY_CLASSES_ROOT\station als voorbeeld van bitlocker-werkwoorden die de volgende methode gebruiken:

  • AppliesTo = System.Volume.BitlockerProtection:=2
  • System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True

Zie Geavanceerde querysyntaxisvoor meer informatie over AQS.

Afgeschaft: Werkwoorden koppelen aan opdrachten voor dynamische gegevensuitwisseling

DDE is afgeschaft; gebruik in plaats daarvan IDropTarget. DDE is verouderd verklaard omdat het afhankelijk is van een broadcast-vensterbericht om de DDE-server te detecteren. Een DDE-server loopt vast, waardoor het bericht van het broadcast-venster wordt belemmerd en veroorzaakt zo dat DDE-gesprekken voor andere toepassingen vastlopen. Het is gebruikelijk dat een enkele vastgelopen toepassing ervoor zorgt dat de gebruikerservaring allemaal vastloopt.

De methode IDropTarget is robuuster en biedt betere activeringsondersteuning omdat er COM-activering van de handler wordt gebruikt. In het geval van meerdere itemselectie is IDropTarget- niet onderworpen aan de buffergroottebeperkingen die zijn gevonden in zowel DDE als de CreateProcess-. Items worden ook doorgegeven aan de toepassing als een gegevensobject dat kan worden geconverteerd naar een itemmatrix met behulp van de functie SHCreateShellItemArrayFromDataObject. Dit is eenvoudiger en verliest geen naamruimtegegevens zoals wanneer het item wordt geconverteerd naar een pad voor opdrachtregel- of DDE-protocollen.

Zie Waargenomen typen en toepassingsregistratievoor meer informatie over IDropTarget, en Shell-query's voor bestandskoppelingskenmerken.

Implementatietaken voor werkwoorden voltooien

De volgende taken voor het implementeren van werkwoorden zijn relevant voor zowel statische als dynamische werkwoord-implementaties. Zie Een snelmenu aanpassen met dynamische werkwoordenvoor meer informatie over dynamische werkwoorden.

Het snelmenu aanpassen voor vooraf gedefinieerde Shell-objecten

Veel vooraf gedefinieerde Shell-objecten hebben snelmenu's die kunnen worden aangepast. Registreer de opdracht op ongeveer dezelfde manier als u typische bestandstypen registreert, maar gebruik de naam van het vooraf gedefinieerde object als de bestandsnaam.

Een lijst met vooraf gedefinieerde objecten bevindt zich in de sectie Vooraf gedefinieerde Shell-objecten van Shell-extensiehandlers maken. Deze vooraf gedefinieerde Shell-objecten waarvan snelmenu's kunnen worden aangepast door werkwoorden toe te voegen in het register, worden gemarkeerd in de tabel met het woord Werkwoord.

Een nieuw submenu uitbreiden

Wanneer een gebruiker het menu Bestand opent in Windows Verkenner, is een van de opdrachten die worden weergegeven Nieuw. Als u deze opdracht selecteert, wordt een submenu weergegeven. Het submenu bevat standaard twee opdrachten, map en snelkoppeling, waarmee gebruikers submappen en snelkoppelingen kunnen maken. Dit submenu kan worden uitgebreid met opdrachten voor het maken van bestanden voor elk bestandstype.

Als u een opdracht voor het maken van bestanden wilt toevoegen aan het submenu Nieuw, moeten de bestanden van uw toepassing een bijbehorend bestandstype hebben. Neem een ShellNew subsleutel op onder de bestandsnaam. Wanneer de opdracht Nieuw van het Bestand menu is geselecteerd, voegt de Shell het bestandstype toe aan het submenu Nieuw. De weergavetekenreeks van de opdracht is de beschrijvende tekenreeks die is toegewezen aan de ProgID van het programma.

Als u de methode voor het maken van bestanden wilt opgeven, wijst u een of meer gegevenswaarden toe aan de subsleutel ShellNew. De beschikbare waarden worden weergegeven in de volgende tabel.

ShellNew-subsleutelwaarde Beschrijving
Bevelen Voert een toepassing uit. Met deze REG_SZ waarde geeft u het pad op van de toepassing die moet worden uitgevoerd. U kunt deze bijvoorbeeld instellen om een wizard te starten.
Gegevens Hiermee maakt u een bestand met opgegeven gegevens. Met deze REG_BINARY waarde worden de gegevens van het bestand opgegeven. Gegevens worden genegeerd als ofwel NullFile of FileName is opgegeven.
Bestandsnaam Hiermee maakt u een bestand dat een kopie van een opgegeven bestand is. Met deze REG_SZ waarde geeft u het volledig gekwalificeerde pad op van het te kopiëren bestand.
NullFile Hiermee maakt u een leeg bestand. NullFile- heeft geen waarde toegewezen. Als NullFile is opgegeven, worden de registerwaarden Data en FileName genegeerd.

 

In het volgende voorbeeld van de registersleutel en schermopname ziet u het submenu Nieuw voor het bestandstype .myp-ms. Het heeft een opdracht, MyProgram Application.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
         NullFile

In de schermafbeelding ziet u het submenu Nieuw. Wanneer een gebruiker MyProgram Application selecteert in het submenu New, maakt de Shell een bestand met de naam New MyProgram Application.myp-ms en geeft het door aan MyProgram.exe.

schermafbeelding van Windows Verkenner met een nieuwe opdracht 'myprogram application' in het submenu 'nieuw'

Handlers voor slepen en neerzetten maken

De basisprocedure voor het implementeren van een handler voor slepen en neerzetten is hetzelfde als voor conventionele handlers voor snelmenu's. Snelmenuhandlers gebruiken normaal gesproken alleen de IDataObject- aanwijzer die wordt doorgegeven aan de IShellExtInit::Initialize-methode om de naam van het object op te halen. Een handler voor slepen en neerzetten kan een geavanceerdere gegevenshandler implementeren om het gedrag van het gesleepte object te wijzigen.

Wanneer een gebruiker met de rechtermuisknop op een Shell-object klikt om een object te slepen, wordt er een snelmenu weergegeven wanneer de gebruiker probeert het object te verwijderen. In de volgende schermafbeelding ziet u een typisch snelmenu voor slepen en neerzetten.

schermafbeelding van snelmenu voor slepen en neerzetten

Een handler voor slepen en neerzetten is een snelmenuhandler waarmee items aan dit snelmenu kunnen worden toegevoegd. Handlers voor slepen en neerzetten worden doorgaans geregistreerd onder de volgende subsleutel.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

Voeg een subsleutel toe onder de DragDropHandlers subsleutel, genoemd naar de handler voor slepen en neerzetten, en stel de standaardwaarde van de subsleutel in op de tekenreeksvorm van de class identifier (CLSID) GUID van de handler. In het volgende voorbeeld wordt de MyDD- handler voor slepen en neerzetten ingeschakeld.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers
            MyDD
               (Default) = {MyDD CLSID GUID}

Werkwoorden onderdrukken en zichtbaarheid beheren

U kunt Windows-beleidsinstellingen gebruiken om de zichtbaarheid van werkwoorden te beheren. Werkwoorden kunnen worden onderdrukt via beleidsinstellingen door een SuppressPolicy--waarde of een SuppressionPolicyEx- GUID-waarde toe te voegen aan de registersubsleutel van het werkwoord. Stel de waarde van de subsleutel SuppressionPolicy in op de beleids-id. Als het beleid is ingeschakeld, worden het werkwoord en de bijbehorende snelmenuvermelding uitgeschakeld. Zie voor mogelijke beleid-ID-waarden de BEPERKINGEN opsomming.

Het werkwoordselectiemodel gebruiken

Registerwaarden moeten worden ingesteld voor werkwoorden voor het afhandelen van situaties waarin een gebruiker één item, meerdere items of een selectie uit een item kan selecteren. Een werkwoord vereist afzonderlijke registerwaarden voor elk van deze drie situaties die door het werkwoord worden ondersteund. De mogelijke waarden voor het selectiemodel voor werkwoorden zijn als volgt:

  • Geef de multiSelectModel-waarde op voor alle werkwoorden. Als de waarde MultiSelectModel niet is opgegeven, wordt deze afgeleid van het type implementatie van werkwoorden dat u hebt gekozen. Voor COM-methoden (zoals DropTarget en ExecuteCommand) Player wordt aangenomen en voor de andere methoden Document wordt aangenomen.
  • Geef Single op voor werkwoorden die slechts één selectie ondersteunen.
  • Specificeer Player- voor werkwoorden die ondersteuning bieden voor een willekeurig aantal items.
  • Geef Document op voor werkwoorden die een hoofdvenster openen voor elk item. Als u dit doet, wordt het aantal geactiveerde items beperkt en wordt voorkomen dat er onvoldoende systeembronnen beschikbaar zijn als de gebruiker te veel vensters opent.

Wanneer het aantal geselecteerde items niet overeenkomt met het selectiemodel voor werkwoorden of groter is dan de standaardlimieten die in de volgende tabel worden beschreven, kan het werkwoord niet worden weergegeven.

Type implementatie van werkwoord Document Speler
Nalatenschap 15 artikelen 100 items
COM 15 artikelen Geen limiet

 

Hieronder ziet u een voorbeeld van registervermeldingen met behulp van de waarde MultiSelectModel.

HKEY_CLASSES_ROOT
   Folder
      shell
         open
             = MultiSelectModel = Document
HKEY_CLASSES_ROOT
   ProgID
      shell
         verb
             = MultiSelectModel = Single | Document | Player

Itemkenmerken gebruiken

De SFGAO vlagwaarden van de Shell-kenmerken voor een item kunnen worden getest om te bepalen of het werkwoord moet worden ingeschakeld of uitgeschakeld.

Als u deze kenmerkfunctie wilt gebruiken, voegt u de volgende REG_DWORD waarden toe onder het werkwoord:

  • De waarde AttributeMask geeft de SFGAO waarde van de bitwaarden van het masker waarmee moet worden getest.
  • De waarde AttributeValue geeft de SFGAO waarde van de bits die worden getest.
  • Het Impliciete Selectiemodel specificeert nul voor itemwerkwoorden, of een niet-nul waarde voor werkwoorden in het achtergrond snelmenu.

In het volgende voorbeeld wordt de AttributeMask ingesteld op SFGAO_READONLY (0x40000).

HKEY_CLASSES_ROOT
   txtfile
      Shell
         test.verb2
            AttributeMask = 0x40000
            AttributeValue = 0x0
            ImpliedSelectionModel = 0x0
            command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Aangepaste werkwoorden voor mappen implementeren via Desktop.ini

In Windows 7 en hoger kunt u via Desktop.iniwerkwoorden toevoegen aan een map. Zie Mappen aanpassen met Desktop.inivoor meer informatie over Desktop.ini bestanden.

Notitie

Desktop.ini bestanden moeten altijd worden gemarkeerd System + Verborgen zodat ze niet worden weergegeven voor gebruikers.

 

Voer de volgende stappen uit om aangepaste werkwoorden toe te voegen voor mappen via een Desktop.ini-bestand:

  1. Maak een map die is gemarkeerd als alleen-lezen of Systeem.

  2. Maak een Desktop.ini-bestand met een [. ShellClassInfo] DirectoryClass=Folder ProgID.

  3. Maak in het register HKEY_CLASSES_ROOT\Folder ProgID met de waarde CanUseForDirectory. De waarde CanUseForDirectory voorkomt misbruik van ProgID's die zijn ingesteld om niet deel te nemen aan het implementeren van aangepaste werkwoorden voor mappen via Desktop.ini.

  4. Voeg werkwoorden toe onder de subsleutel MapProgID, bijvoorbeeld:

    HKEY_CLASSES_ROOT
       CustomFolderType
          Shell
             MyVerb
                command
                   (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
    

Notitie

Deze werkwoorden kunnen het standaardwerkwoord zijn. In dat geval dubbelklikt u op de map waarmee het werkwoord wordt geactiveerd.

 

Aanbevolen procedures voor snelmenuhandlers en meerdere selectiewerkwoorden

een statisch of dynamisch werkwoord kiezen voor het snelmenu

een snelmenu aanpassen met dynamische werkwoorden

Snelmenu's en snelmenu-handlers

werkwoorden en bestandassociaties

Snelmenu Referentie