Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obsługiwacze menu skrótów, znane również jako obsługiwacze menu kontekstowego lub verb obsługiwacze, są typem obsługiwaczy typów plików. Te moduły obsługi mogą być implementowane w sposób powodujący ich załadowanie we własnym procesie, w eksploratorze lub w procesach innych firm. Należy zachować ostrożność podczas tworzenia procedur obsługi procesów, ponieważ mogą one spowodować szkodę w procesie, który je ładuje.
Uwaga / Notatka
Istnieją specjalne zagadnienia dotyczące 64-bitowych wersji systemu Windows podczas rejestrowania obsług, które działają w kontekście aplikacji 32-bitowych: w przypadku wywołania w kontekście aplikacji o innej liczbie bitów podsystem WOW64 przekierowuje dostęp do systemu plików na niektóre ścieżki. Jeśli program obsługi .exe jest przechowywany w jednej z tych ścieżek, nie jest dostępny w tym kontekście. W związku z tym, jako rozwiązanie, zapisz .exe w ścieżce, która nie zostanie przekierowana, lub zapisz wersję tymczasową .exe, która uruchamia rzeczywistą wersję.
Ten temat jest zorganizowany w następujący sposób:
- czasowniki kanoniczne
- czasowniki rozszerzone
- Czasowniki dostępne wyłącznie programowo
-
Dostosowywanie menu skrótów przy użyciu czasowników statycznych
- Aktywowanie programu obsługi przy użyciu interfejsu IDropTarget
- Określanie położenia i kolejności czasowników statycznych
- Pozycjonowanie czasowników w górnej lub dolnej części menu
- tworzenie statycznych menu kaskadowych
- Uzyskiwanie dynamicznego zachowania dla czasowników statycznych przy użyciu zaawansowanej składni zapytań
- Przestarzałe: kojarzenie czasowników z poleceniami Dynamic Data Exchange
- Kończenie Verb zadań implementacji
- Tematy pokrewne
Czasowniki kanoniczne
Aplikacje są zazwyczaj odpowiedzialne za dostarczanie zlokalizowanych ciągów znaków do wyświetlenia dla zdefiniowanych czasowników. Jednak w celu zapewnienia stopnia niezależności języka system definiuje standardowy zestaw powszechnie używanych czasowników nazywanych czasownikami kanonicznymi. Canonical verb nigdy nie jest wyświetlany użytkownikowi oraz może być używany z dowolnym językiem interfejsu użytkownika. System używa nazwy kanonicznej do automatycznego generowania prawidłowo zlokalizowanych ciągów wyświetlania. Na przykład ciąg znaków wyświetlania verb jest ustawiony na Otwórz w systemie angielskim i na niemiecki odpowiednik w niemieckim systemie.
| Kanoniczny verb | Opis |
|---|---|
| Open | Otwiera plik lub folder. |
| Opennew | Otwiera plik lub folder w nowym oknie. |
| Drukuje plik. | |
| Printto | Umożliwia użytkownikowi drukowanie pliku przez przeciągnięcie go do obiektu drukarki. |
| Explore | Otwiera Eksploratora Windows z wybranym folderem. |
| Properties | Otwiera arkusz właściwości obiektu. |
Uwaga / Notatka
Printtoverb jest również kanoniczny, ale nigdy nie jest wyświetlany. Jego dołączenie umożliwia użytkownikowi drukowanie pliku przez przeciągnięcie go do obiektu drukarki.
Programy obsługi menu skrótów mogą udostępniać własne czasowniki kanoniczne za pomocą IContextMenu::GetCommandString z GCS_VERBW lub GCS_VERBA. System będzie używać czasowników kanonicznych jako drugiego parametru (lpOperation) przekazanego do ShellExecute, co stanowi element członkowski lpVerb przekazany do metody IContextMenu::InvokeCommand w ramach CMINVOKECOMMANDINFO.
Czasowniki rozszerzone
Gdy użytkownik kliknie obiekt prawym przyciskiem myszy, menu skrótów wyświetli domyślne czasowniki. Możesz dodać oraz obsługiwać polecenia w niektórych menu skrótów, które nie są widoczne we wszystkich menu skrótów. Na przykład możesz mieć polecenia, które nie są często używane lub przeznaczone dla doświadczonych użytkowników. Z tego powodu można również zdefiniować jedno lub więcej czasowników rozszerzonych. Te czasowniki są podobne do zwykłych czasowników, ale różnią się od normalnych czasowników w sposób ich rejestrowania. Aby mieć dostęp do rozszerzonych czasowników, użytkownik musi kliknąć prawym przyciskiem myszy obiekt przy naciśnięciu SHIFT. Gdy użytkownik to zrobi, oprócz domyślnych czasowników są wyświetlane czasowniki rozszerzone.
Rejestru można użyć do zdefiniowania jednego lub więcej czasowników rozszerzonych. Skojarzone polecenia będą wyświetlane tylko wtedy, gdy użytkownik kliknie prawym przyciskiem myszy obiekt, jednocześnie naciskając SHIFT. Aby zdefiniować verb jako rozszerzony, dodaj wartość "extended" REG_SZ do podklucza verb. Wartość nie powinna zawierać żadnych skojarzonych z nim danych.
Czasowniki dostępne wyłącznie programowo
Te czasowniki nigdy nie są wyświetlane w menu kontekstowym. Dostęp do nich można uzyskać za pomocą klasy ShellExecuteEx i określenia pola lpVerb parametru pExecInfo (obiektu SHELLEXECUTEINFO ). Aby zdefiniować verb dostęp wyłącznie do użytku programowego, dodaj wartość "ProgrammaticAccessOnly" REG_SZ do podklucza verb. Wartość nie powinna zawierać żadnych skojarzonych z nim danych.
Rejestru można użyć do zdefiniowania jednego lub więcej czasowników rozszerzonych. Skojarzone polecenia będą wyświetlane tylko wtedy, gdy użytkownik kliknie prawym przyciskiem myszy obiekt, jednocześnie naciskając SHIFT. Aby zdefiniować verb jako rozszerzoną, dodaj wartość "extended" REG_SZ do podklucza verb. Wartość nie powinna zawierać żadnych skojarzonych z nim danych.
Dostosowywanie menu skrótów przy użyciu czasowników statycznych
Po wybraniu statycznego lub dynamicznego Verb dla menu skrótów można rozszerzyć menu skrótów dla typu pliku, rejestrując statyczny verb związany z typem pliku. W tym celu dodaj Shell podklucz poniżej podklucza dla identyfikatora ProgID aplikacji skojarzonej z typem pliku. Opcjonalnie możesz zdefiniować wartość domyślną verb dla typu pliku, określając jako domyślną wartość podklucza Shell .
Wartość domyślna verb jest wyświetlana jako pierwsza w menu skrótów. Jego celem jest dostarczenie Shell, z którego verb można korzystać, gdy wywoływana jest funkcja ShellExecuteEx, ale nie określono verb. Element Shell nie musi wybierać wartości domyślnej verb , gdy element ShellExecuteEx jest używany w ten sposób.
Używa Shell pierwszego dostępnego verb w następującej kolejności:
- Wartość domyślna verb
- Pierwszy verb w rejestrze, jeśli verb określono kolejność
- Ten Openverb
- Ten Open Withverb
Jeśli żadna z wymienionych czasowników nie jest dostępna, operacja zakończy się niepowodzeniem.
Utwórz jeden podklucz dla każdego verb, który chcesz dodać pod podkluczem Shell. Każdy z tych podkluczy musi mieć wartość typu REG_SZ ustawioną na wyświetlany ciąg znaków verb (zlokalizowany ciąg znaków). Dla każdego verb podklucza utwórz podklucz polecenia i ustaw jego wartość domyślną na linię poleceń do aktywacji elementów. W przypadku czasowników kanonicznych, takich jak Open i Print, można pominąć ciąg wyświetlania, ponieważ system automatycznie wyświetla prawidłowo zlokalizowany ciąg. W przypadku czasowników niekanonicznych, jeśli pomijasz ciąg wyświetlania, wyświetlany jest ciąg verb.
W poniższym przykładzie rejestru należy pamiętać, że:
- Ponieważ Doit nie jest kanoniczną verb, przypisano nazwę wyświetlaną, którą można wybrać, naciskając klawisz D.
- Polecenie Printtoverb nie jest wyświetlane w menu skrótów. Jednak włączenie go do rejestru umożliwia użytkownikowi drukowanie plików poprzez przeciąganie ich na ikonę drukarki.
- Dla każdego verb jest wyświetlany jeden podklucz. %1 reprezentuje nazwę pliku i %2 nazwę drukarki.
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"
Na poniższym diagramie przedstawiono rozszerzenie menu skrótów zgodnie z powyższymi wpisami rejestru. To menu skrótów zawiera czasowniki Open, Do It i Print, z domyślną opcją Do It jako verb.
Aktywowanie obsługiwacza przy użyciu interfejsu IDropTarget
Dynamiczna wymiana danych (DDE) jest przestarzała; Zamiast tego użyj elementu IDropTarget . IDropTarget jest bardziej niezawodny i ma lepsze wsparcie aktywizacji, ponieważ używa aktywizacji COM modułu obsługi. W przypadku zaznaczenia wielu elementów element IDropTarget nie podlega ograniczeniom rozmiaru buforu występującym zarówno w przypadku funkcji DDE, jak i metody CreateProcess. Ponadto elementy są przekazywane do aplikacji jako obiekt danych, który można przekonwertować na tablicę elementów przy użyciu funkcji SHCreateShellItemArrayFromDataObject . Jest to prostsze i nie traci informacji o przestrzeni nazw, tak jak ma miejsce, gdy element jest konwertowany na ścieżkę dla protokołów wiersza polecenia lub DDE.
Aby uzyskać więcej informacji na temat identyfikatora IDropTarget i Shell zapytań dotyczących atrybutów skojarzenia plików, zobacz Postrzegane typy i rejestracja aplikacji.
Określanie położenia i kolejności czasowników statycznych
Zwykle czasowniki są uporządkowane w menu skrótów na podstawie ich kolejności; wyliczenie opiera się najpierw na kolejności wystąpień w tablicy skojarzeń, a następnie na kolejności pozycji w tej tablicy, zgodnie z porządkiem sortowania rejestru.
Czasowniki można porządkować, określając domyślną wartość podklucza Shell dla wpisu skojarzenia. Ta wartość domyślna może zawierać pojedynczy element, który będzie wyświetlany w górnej części menu skrótów lub listę elementów rozdzielonych spacjami lub przecinkami. W tym drugim przypadku pierwszy element na liście jest elementem domyślnym, a inne czasowniki są wyświetlane bezpośrednio pod nim w określonej kolejności.
Na przykład następujący wpis rejestru tworzy czasowniki menu skrótów w następującej kolejności:
- Wyświetlacz
- Gadżety
- Personalizacja
HKEY_CLASSES_ROOT
DesktopBackground
Shell
Display
Gadgets
Personalization
Podobnie, następujący wpis rejestru tworzy polecenia menu kontekstowego w następującej kolejności:
- Personalizacja
- Gadżety
- Wyświetlacz
HKEY_CLASSES_ROOT
DesktopBackground
Shell = "Personalization,Gadgets"
Display
Pozycjonowanie czasowników w górnej lub dolnej części menu
Za pomocą następującego atrybutu rejestru można umieścić verb na górze lub na dole menu. Jeśli istnieje wiele czasowników określających ten atrybut, priorytet ma ten, który określił go jako ostatni.
Position=Top | Bottom
Tworzenie menu kaskadowych statycznych
W systemie Windows 7 lub nowszym implementacja menu kaskadowego jest obsługiwana za pomocą ustawień rejestru. Przed systemem Windows 7 tworzenie menu kaskadowych było możliwe tylko poprzez implementację interfejsu IContextMenu. W systemie Windows 7 lub nowszym należy uciekać się do rozwiązań opartych na kodzie COM tylko wtedy, gdy metody statyczne są niewystarczające.
Poniższy zrzut ekranu przedstawia przykład menu kaskadowego.
W systemie Windows 7 lub nowszym istnieją trzy sposoby tworzenia kaskadowych menu:
- Tworzenie kaskadowych menu przy użyciu wpisu rejestru Podkomendy
- Tworzenie menu kaskadowych z wpisem rejestru ExtendedSubCommandsKey
- Tworzenie menu kaskadowych za pomocą interfejsu IExplorerCommand
Tworzenie menu kaskadowych z wpisem rejestru Podpolecenia
W systemie Windows 7 lub nowszym można użyć wpisu Podpolecenia, aby utworzyć kaskadowe menu, korzystając z poniższej procedury.
Aby utworzyć menu kaskadowe przy użyciu wpisu SubCommands
Utwórz podklucz w obszarze HKEY_CLASSES_ROOT\ProgID\shell , aby reprezentować menu kaskadowe. W tym przykładzie nadamy temu podkluczowi nazwę CascadeTest. Upewnij się, że wartość domyślna podklucza CascadeTest jest pusta i wyświetlana jako (wartość nie ustawiona).
HKEY_CLASSES_ROOT * shell CascadeTest (Default)Do podklucza CascadeTest dodaj wpis MUIVerb typu REG_SZ i przypisz mu tekst, który będzie wyświetlany jako jego nazwa w menu skrótów. W tym przykładzie przypisujemy nazwę "Test Cascade Menu".
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade MenuDodaj wpis SubCommands typu REG_SZ do podklucza CascadeTest, który jest przypisany jako lista czasowników, rozdzielana średnikami, które powinny być wyświetlane w menu w kolejności, w jakiej się pojawiają. Na przykład w tym miejscu przypisujemy kilka czasowników dostarczonych przez system:
HKEY_CLASSES_ROOT * Shell CascadeTest SubCommands Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.pasteW przypadku czasowników niestandardowych zaimplementuj je przy użyciu dowolnej ze statycznych verb metod implementacji i wyświetl je w podkluczu CommandStore , jak pokazano w tym przykładzie dla fikcyjnego verbverbName:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer CommandStore Shell VerbName command (Default) = notepad.exe %1
Uwaga / Notatka
Ta metoda ma tę zaletę, że czasowniki niestandardowe można zarejestrować raz i ponownie użyć, umieszczając nazwę verb w sekcji SubCommands. Wymaga to jednak, aby aplikacja miała uprawnienia do modyfikowania rejestru w HKEY_LOCAL_MACHINE.
Tworzenie menu kaskadowych za pomocą wpisu rejestru "ExtendedSubCommandsKey"
W systemie Windows 7 lub nowszym można użyć wpisu ExtendedSubCommandKey, aby utworzyć rozszerzone menu kaskadowe: kaskadowe menu w menu kaskadowych.
Poniższy zrzut ekranu to przykład rozszerzonego menu kaskadowego.
zrzut ekranu 
Ponieważ HKEY_CLASSES_ROOT jest kombinacją HKEY_CURRENT_USER i HKEY_LOCAL_MACHINE, można zarejestrować dowolne czasowniki niestandardowe w podkluczu HKEY_CURRENT_USER\Software\Classes. Główną zaletą jest to, że podwyższone uprawnienia nie są wymagane. Inne skojarzenia plików mogą również ponownie używać tego całego zestawu poleceń przez określenie tego samego podklucza ExtendedSubCommandsKey. Jeśli nie musisz ponownie używać tego zestawu czasowników, możesz wymienić czasowniki pod elementem nadrzędnym, ale upewnij się, że wartość domyślna elementu nadrzędnego jest pusta.
Aby utworzyć menu kaskadowe za pomocą wpisu ExtendedSubCommandsKey
Utwórz podklucz w obszarze HKEY_CLASSES_ROOT\ProgID\shell , aby reprezentować menu kaskadowe. W tym przykładzie nadamy temu podkluczowi nazwę CascadeTest2. Upewnij się, że wartość domyślna podklucza CascadeTest jest pusta i wyświetlana jako (wartość nie ustawiona).
HKEY_CLASSES_ROOT * shell CascadeTest2 (Default)Do podklucza CascadeTest dodaj wpis MUIVerb typu REG_SZ i przypisz mu tekst, który będzie wyświetlany jako jego nazwa w menu skrótów. W tym przykładzie przypisujemy mu nazwę „Test Cascade Menu”.
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade Menu 2W utworzonym podkluczu CascadeTest dodaj podklucz ExtendedSubCommandsKey i następnie dodaj podkomendy dokumentu typu REG_SZ; na przykład:
HKEY_CLASSES_ROOT txtfile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Layout Properties Select allUpewnij się, że wartość domyślna podklucza Test Cascade Menu 2 jest pusta i wyświetlana jako (wartość nie ustawiona).
Wypełnij podfunkcje przy użyciu dowolnej z poniższych statycznych implementacji verb. Pamiętaj, że podklucz CommandFlags reprezentuje wartości EXPCMDFLAGS. Jeśli chcesz dodać separator przed elementem menu kaskadowego lub po nim, użyj ECF_SEPARATORBEFORE (0x20) lub ECF_SEPARATORAFTER (0x40). Aby uzyskać opis tych flag systemu Windows 7 i nowszych, zobacz IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE działa tylko dla elementów menu najwyższego poziomu. MUIVerb jest typu REG_SZ, a CommandFlags jest typu 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
Poniższy zrzut ekranu ilustruje przykłady wcześniejszych wpisów klucza rejestru.
Tworzenie menu kaskadowych za pomocą interfejsu IExplorerCommand
Inną możliwością dodania czasowników do menu kaskadowego jest IExplorerCommand::EnumSubCommands. Ta metoda umożliwia źródła danych, które udostępniają polecenia modułu poleceń za pośrednictwem interfejsu IExplorerCommandProvider , aby używać tych poleceń jako czasowników w menu skrótów. W systemie Windows 7 lub nowszym możesz podać tę samą verb implementację przy użyciu polecenia IExplorerCommand , jak w przypadku interfejsu IContextMenu.
Poniższe dwa zrzuty ekranu ilustrują użycie kaskadowych menu w folderze Devices.
Poniższy zrzut ekranu ilustruje inną implementację menu kaskadowego w folderze Urządzenia .
Uwaga / Notatka
Ponieważ funkcja IExplorerCommand obsługuje tylko aktywację w procesie, zaleca się używanie ich przez Shell źródła danych, które muszą udostępniać implementację między poleceniami i menu skrótów.
Uzyskiwanie dynamicznego zachowania dla czasowników statycznych przy użyciu zaawansowanej składni zapytań
Zaawansowana składnia zapytań (AQS) może wyrazić warunek, który zostanie oceniony przy użyciu właściwości z elementu, dla którego verb jest instancjonowane. Ten system działa tylko z szybkimi właściwościami. To są właściwości, które źródło danych Shell raportuje jako szybkie, ponieważ nie zwraca SHCOLSTATE_SLOW z IShellFolder2::GetDefaultColumnState.
System Windows 7 i nowsze wspierają wartości kanoniczne, co umożliwia unikanie problemów na zlokalizowanych kompilacjach. Następująca składnia kanoniczna jest wymagana w zlokalizowanych kompilacjach, aby korzystać z tego rozszerzenia systemu Windows 7.
System.StructuredQueryType.Boolean#True
W poniższym przykładowym wpisie rejestru:
- Wartość AppliesTo określa, czy verb element jest wyświetlany, czy ukryty.
- Wartość DefaultAppliesTo kontroluje, które verb jest domyślnym.
- Wartość HasLUAShield określa, czy jest wyświetlana osłona kontroli konta użytkownika (UAC).
W tym przykładzie wartość DefaultAppliesTo powoduje, że jest to verb ustawienie domyślne dla dowolnego pliku ze słowem "exampleText1" w nazwie pliku. Wartość AppliesTo włącza verb dla dowolnego pliku o nazwie "exampleText1". Wartość HasLUAShield wyświetla osłonę dla plików o nazwie "exampleText2".
HKEY_CLASSES_ROOT
txtile
shell
test.verb
DefaultAppliesTo = System.ItemName:"exampleText1"
HasLUAShield = System.ItemName:"exampleText2"
AppliesTo = System.ItemName:"exampleText1"
Dodaj podklucz Komenda i wartość:
HKEY_CLASSES_ROOT
txtile
shell
test.verb
Command
(Default) = %SystemRoot%\system32\notepad.exe %1
W rejestrze systemu Windows 7 zobacz HKEY_CLASSES_ROOT\dysk jako przykład czasowników związanych z BitLockerem, które stosują następujące podejście:
- AppliesTo = System.Volume.BitlockerProtection:=2
- System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True
Aby uzyskać więcej informacji na temat AQS, zobacz Advanced Query Syntax (Zaawansowana składnia zapytań).
Przestarzałe: kojarzenie czasowników z dynamicznymi poleceniami wymiany danych
DDE jest przestarzała; Zamiast tego użyj elementu IDropTarget . Funkcja DDE jest przestarzała, ponieważ opiera się na komunikacie okna emisji w celu odnalezienia serwera DDE. Serwer DDE zawiesza się, zatrzymując komunikat wysyłany z okna, co powoduje zawieszenie konwersacji DDE w innych aplikacjach. Zablokowana aplikacja często powoduje, że kolejne aplikacje zawieszają się w całym środowisku użytkowania.
Metoda IDropTarget jest bardziej niezawodna i ma lepszą obsługę aktywacji, ponieważ używa aktywacji COM obsługującego. W przypadku zaznaczenia wielu elementów element IDropTarget nie podlega ograniczeniom rozmiaru buforu występującym zarówno w przypadku funkcji DDE, jak i metody CreateProcess. Ponadto elementy są przekazywane do aplikacji jako obiekt danych, który można przekonwertować na tablicę elementów przy użyciu funkcji SHCreateShellItemArrayFromDataObject . Jest to prostsze i nie traci informacji o przestrzeni nazw, tak jak ma miejsce, gdy element jest konwertowany na ścieżkę dla protokołów wiersza polecenia lub DDE.
Aby uzyskać więcej informacji na temat identyfikatora IDropTarget i Shell zapytań dotyczących atrybutów skojarzenia plików, zobacz Postrzegane typy i rejestracja aplikacji.
Kończenie Verb zadań implementacji
Następujące zadania implementowania czasowników są istotne zarówno dla implementacji statycznych, jak i dynamicznych verb . Aby uzyskać więcej informacji na temat czasowników dynamicznych, zobacz Dostosowywanie menu skrótów przy użyciu czasowników dynamicznych.
Dostosowywanie menu skrótów dla wstępnie zdefiniowanych Shell obiektów
Wiele wstępnie zdefiniowanych Shell obiektów ma menu skrótów, które można dostosować. Zarejestruj polecenie w taki sam sposób, jak w przypadku rejestrowania typowych typów plików, ale użyj nazwy wstępnie zdefiniowanego obiektu jako nazwy typu pliku.
Lista wstępnie zdefiniowanych obiektów znajduje się w sekcji Wstępnie zdefiniowane Shell obiekty w sekcji Tworzenie Shell procedur obsługi rozszerzeń. Te wstępnie zdefiniowane Shell obiekty, których menu skrótów można dostosować, dodając czasowniki w rejestrze są oznaczone w tabeli wyrazem Verb.
Rozszerzanie nowego podmenu
Gdy użytkownik otworzy menu Plik w Eksploratorze Windows, jedno z wyświetlanych poleceń to Nowy. Wybranie tego polecenia powoduje wyświetlenie podmenu. Domyślnie podmenu zawiera dwa polecenia, Folder i Skrót, które umożliwiają użytkownikom tworzenie podfolderów i skrótów. Ten podmenu można rozszerzyć w celu uwzględnienia poleceń tworzenia plików dla dowolnego typu pliku.
Aby dodać polecenie tworzenia plików do podmenu Nowy , pliki aplikacji muszą mieć skojarzony typ pliku. Dołącz podklucz ShellNew pod nazwą pliku. Po wybraniu polecenia Nowy menu Plik zostanie dodany Shell typ pliku do podmenu Nowy. Ciąg wyświetlany polecenia jest ciągiem opisowym przypisanym do identyfikatora ProgID programu.
Aby określić metodę tworzenia pliku, przypisz co najmniej jedną wartość danych do podklucza ShellNew . Dostępne wartości są wymienione w poniższej tabeli.
| ShellNowa wartość podklucza | Opis |
|---|---|
| Komenda | Wykonuje aplikację. Ta REG_SZ wartość określa ścieżkę aplikacji do wykonania. Można na przykład ustawić go tak, aby uruchamiał kreatora. |
| Dane | Tworzy plik zawierający określone dane. Ta REG_BINARY wartość określa dane pliku. Dane są ignorowane, jeśli określono wartość NullFile lub FileName . |
| NazwaPliku | Tworzy plik, który jest kopią określonego pliku. Ta REG_SZ wartość określa w pełni kwalifikowaną ścieżkę pliku do skopiowania. |
| PustyPlik | Tworzy pusty plik. NullFile nie ma przypisanej wartości. Jeśli określono NullFile, wartości rejestru Data i FileName są ignorowane. |
Poniższy przykład klucza rejestru i zrzut ekranu ilustrują podmenu New dla typu pliku .myp-ms. Zawiera komendę MyProgram Application.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
ShellNew
NullFile
Zrzut ekranu ilustruje podmenu Nowy . Gdy użytkownik wybierze aplikację MyProgram z podmenu Nowy , Shell tworzy plik o nazwie NewProgram Application.myp-ms i przekazuje go do MyProgram.exe.
Tworzenie programistycznych mechanizmów przeciągania i upuszczania
Podstawowa procedura implementowania procedury obsługi przeciągania i upuszczania jest taka sama jak w przypadku konwencjonalnych procedur obsługi menu skrótów. Jednak programy obsługi menu skrótów zwykle używają tylko wskaźnika IDataObject, przekazanego do metody IShellExtInit::Initialize programu obsługi, w celu wyodrębnienia nazwy obiektu. Procedura obsługi przeciągania i upuszczania może zaimplementować bardziej zaawansowaną procedurę obsługi danych w celu zmodyfikowania zachowania przeciąganego obiektu.
Gdy użytkownik kliknie Shell obiekt prawym przyciskiem myszy, aby przeciągnąć obiekt, zostanie wyświetlone menu skrótów, gdy użytkownik spróbuje usunąć obiekt. Poniższy zrzut ekranu przedstawia typowe menu skrótów przeciągania i upuszczania.
Procedura obsługi przeciągania i upuszczania to procedura obsługi menu skrótów, która może dodawać elementy do tego menu skrótów. Programy obsługujące przeciąganie i upuszczanie są zwykle rejestrowane pod następującym podkluczem.
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
Dodaj podklucz w podkluczu DragDropHandlers o nazwie dla programu obsługi przeciągania i upuszczania, a następnie ustaw wartość domyślną podklucza na postać ciągu identyfikatora klasy programu obsługi (CLSID) GUID. Poniższy przykład umożliwia obsługę przeciągania i upuszczania za pomocą uchwytu MyDD.
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
MyDD
(Default) = {MyDD CLSID GUID}
Ukrywanie czasowników i kontrolowanie widoczności
Możesz korzystać z opcji zasad systemu Windows, aby kontrolować verb widoczność. Czasowniki można pominąć za pomocą ustawień zasad, dodając wartość SuppressionPolicy lub wartość identyfikatora GUID SuppressionPolicyEx do podklucza rejestru verb. Ustaw wartość podklucza SuppressionPolicy na identyfikator polityki. Jeśli zasada jest włączona, verb i pozycja menu skrótów skojarzona z nią są usuwane. Aby uzyskać informacje o możliwych wartościach identyfikatorów zasad, zobacz wyliczenie RESTRICTIONS.
Verb Stosowanie modelu wyboru
Wartości rejestru należy ustawić, aby czasowniki mogły obsługiwać sytuacje, w których użytkownik może wybrać pojedynczy element, wiele elementów lub wybór z elementu. Element verb wymaga oddzielnych wartości rejestru dla każdej z tych trzech sytuacji, które verb obsługuje. Możliwe wartości modelu verb wyboru są następujące:
- Określ wartość MultiSelectModel dla wszystkich czasowników. Jeśli nie określono wartości MultiSelectModel, zostanie ona wywnioskowana z wybranego typu implementacji verb . W przypadku metod opartych na modelu COM (takich jak DropTarget i ExecuteCommand) zakłada się Player, natomiast dla innych metod zakłada się Document.
- Określ pojedynczy dla czasowników, które obsługują tylko jeden wybór.
- Określ Player dla czasowników obsługujących dowolną liczbę elementów.
- Określ Dokument dla czasowników, które tworzą okno najwyższego poziomu dla każdego elementu. W ten sposób ogranicza liczbę aktywowanych elementów i pomaga uniknąć wyczerpania zasobów systemowych, jeśli użytkownik otworzy zbyt wiele okien.
Jeśli liczba zaznaczonych elementów nie jest zgodna z modelem verb wyboru lub jest większa niż domyślne limity opisane w poniższej tabeli, verb nie można wyświetlić.
| Typ implementacji verb | Dokument | Gracz |
|---|---|---|
| Dziedzictwo | 15 elementów | 100 elementów |
| COM | 15 elementów | Brak ograniczeń |
Poniżej przedstawiono przykładowe wpisy rejestru przy użyciu wartości MultiSelectModel.
HKEY_CLASSES_ROOT
Folder
shell
open
= MultiSelectModel = Document
HKEY_CLASSES_ROOT
ProgID
shell
verb
= MultiSelectModel = Single | Document | Player
Używanie atrybutów elementu
Wartości flag SFGAO atrybutów Shell elementu można przetestować, aby określić, czy verb mają być włączone czy wyłączone.
Aby użyć tej funkcji atrybutu, dodaj następujące wartości REG_DWORD w obszarze :verb
- Wartość AttributeMask określa SFGAO jako wartość bitową maski do przetestowania.
- Wartość AttributeValue określa SFGAO wartość bitów, które są testowane.
- ImpliedSelectionModel określa zero dla czasowników związanych z elementami lub wartość niezerową dla czasowników w menu kontekstowym.
W poniższym przykładowym wpisie rejestru maska atrybutów jest ustawiona na SFGAO_READONLY (0x40000).
HKEY_CLASSES_ROOT
txtfile
Shell
test.verb2
AttributeMask = 0x40000
AttributeValue = 0x0
ImpliedSelectionModel = 0x0
command
(Default) = %SystemRoot%\system32\notepad.exe %1
Implementowanie niestandardowych czasowników dla folderów za pomocą Desktop.ini
W systemie Windows 7 lub nowszym można dodawać czasowniki do folderu za pomocą Desktop.ini. Aby uzyskać więcej informacji na temat plików Desktop.ini, zobacz Jak dostosować foldery za pomocą Desktop.ini.
Uwaga / Notatka
Desktop.ini pliki powinny być zawsze oznaczone jako System + Ukryte, aby nie były wyświetlane użytkownikom.
Aby dodać niestandardowe czasowniki dla folderów za pomocą pliku Desktop.ini, wykonaj następujące kroki:
Utwórz folder oznaczony jako Tylko do odczytu lub System.
Utwórz plik Desktop.ini zawierający [.ShellClassInfo] DirectoryClass=Folder ProgID.
W rejestrze utwórz HKEY_CLASSES_ROOT\Folder ProgID z wartością CanUseForDirectory. Wartość CanUseForDirectory pozwala uniknąć nieprawidłowego użycia identyfikatorów ProgID, które nie są ustawione do udziału w implementowaniu niestandardowych czasowników dla folderów za pośrednictwem Desktop.ini.
Dodaj komendy w podkluczu Folder ProgID, takie jak:
HKEY_CLASSES_ROOT CustomFolderType Shell MyVerb command (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
Uwaga / Notatka
Te czasowniki mogą być domyślne verb, w tym przypadku dwukrotne kliknięcie folderu aktywuje verb.
Tematy pokrewne
-
Najlepsze praktyki dla obsługi menu kontekstowego i czasowników wielokrotnego wyboru
-
dostosowywanie menu skrótów przy użyciu czasowników dynamicznych