Udostępnij przez


Tworzenie programów obsługi menu skrótów

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

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.
Print 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:

  1. Wartość domyślna verb
  2. Pierwszy verb w rejestrze, jeśli verb określono kolejność
  3. Ten Openverb
  4. 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.

zrzut ekranu przedstawiający 'do it default' verb menu skrótów

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:

  1. Wyświetlacz
  2. Gadżety
  3. 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:

  1. Personalizacja
  2. Gadżety
  3. 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.

zrzut ekranu przedstawiający przykład menu kaskadowego

W systemie Windows 7 lub nowszym istnieją trzy sposoby tworzenia kaskadowych menu:

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

  1. 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)
    
  2. 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 Menu
    
  3. Dodaj 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.paste
    
  4. W 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 przedstawiający rozszerzone menu kaskadowe dla urządzeń

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

  1. 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)
    
  2. 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 2
    
  3. W 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 all
    

    Upewnij się, że wartość domyślna podklucza Test Cascade Menu 2 jest pusta i wyświetlana jako (wartość nie ustawiona).

  4. 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.

zrzut ekranu przedstawiający przykład menu kaskadowego z wyborami Notatnika i WordPada

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.

Zrzut ekranu przedstawiający przykład menu kaskadowego w folderze devices.

Poniższy zrzut ekranu ilustruje inną implementację menu kaskadowego w folderze Urządzenia .

zrzut ekranu przedstawiający przykład menu kaskadowego w folderze devices

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.

Zrzut ekranu Eksploratora Windows przedstawiający nowe polecenie

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.

zrzut ekranu przedstawiający 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:

  1. Utwórz folder oznaczony jako Tylko do odczytu lub System.

  2. Utwórz plik Desktop.ini zawierający [.ShellClassInfo] DirectoryClass=Folder ProgID.

  3. 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.

  4. 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.

 

Najlepsze praktyki dla obsługi menu kontekstowego i czasowników wielokrotnego wyboru

Wybieranie statycznego lub dynamicznego Verb menu skrótów

dostosowywanie menu skrótów przy użyciu czasowników dynamicznych

Menu kontekstowe (skrótów) i obsługiwane przez nie programy

czasowniki i skojarzenia plików

Odnośnik do menu skrótów