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
- uitgebreide werkwoorden
- Werkwoorden Alleen voor Programmatische Toegang
-
een snelmenu aanpassen met behulp van statische werkwoorden
- uw handler activeren met behulp van de IDropTarget-interface
- de positie en volgorde van statische werkwoorden opgeven
- Het positioneren van werkwoorden boven of onder aan het menu
- Statische cascaderende menu's maken
- dynamisch gedrag voor statische werkwoorden krijgen met behulp van geavanceerde querysyntaxis
- afgeschaft: Werkwoorden koppelen aan opdrachten voor dynamische gegevensuitwisseling
- taken voor werkwoorduitvoering voltooien
- Verwante onderwerpen
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:
- Het standaardwoord
- Het eerste werkwoord in het register, als de werkwoordvolgorde is opgegeven
- Open werkwoord
- 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.
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:
- Beeldscherm
- Gadgets
- Personalisatie
HKEY_CLASSES_ROOT
DesktopBackground
Shell
Display
Gadgets
Personalization
Op dezelfde manier produceert de volgende registervermelding snelmenuopdrachten in de volgende volgorde:
- Personalisatie
- Gadgets
- 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.
In Windows 7 en hoger zijn er drie manieren om trapsgewijze menu's te maken:
- Uitklapmenu's maken met de registerinvoer 'SubOpdrachten'
- Trapsgewijze menu's maken met de registervermelding ExtendedSubCommandsKey
- Trapsgewijze menu's maken met de interface IExplorerCommand
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
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)
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
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
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.
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
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)
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
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).
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.
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.
In de volgende schermafbeelding ziet u een andere implementatie van een trapsgewijs 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.
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.
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:
Maak een map die is gemarkeerd als alleen-lezen of Systeem.
Maak een Desktop.ini-bestand met een [. ShellClassInfo] DirectoryClass=Folder ProgID.
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.
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.
Verwante onderwerpen
-
Aanbevolen procedures voor snelmenuhandlers en meerdere selectiewerkwoorden
-
een statisch of dynamisch werkwoord kiezen voor het snelmenu