Udostępnij za pośrednictwem


Najlepsze praktyki dotyczące obsługi menu skrótów i wielu czasowników

Ten temat jest zorganizowany w następujący sposób:

Najlepsze rozwiązania

Czasowniki statyczne to najprostsze czasowniki do zaimplementowania i zapewniają zaawansowane funkcje. Zdecydowanie zachęcamy do zaimplementowania czasownika przy użyciu jednej ze statycznych metod czasowników.

Najlepsze rozwiązania dotyczące implementacji czasowników

Poniższa lista reprezentuje najlepsze rozwiązania dotyczące implementacji czasowników:

  • Zawsze wybieraj najprostszy sposób użycia czasowników, który spełnia Twoje potrzeby.
  • Jeśli to możliwe, użyj metody czasownika statycznego.
  • Nie wykonuj operacji intensywnie korzystających z zasobów ani operacji wejścia/wyjścia w wątku interfejsu użytkownika. Zarówno IShellExtInit::Initialize, jak i IContextMenu::QueryContextMenu muszą być bardzo ostrożne w wykonywanych działaniach. IContextMenu::InvokeCommand należy wykonać w innym procesie lub należy utworzyć nowy wątek, aby uniknąć blokowania obiektu wywołującego.
  • Prefiksuj czasowniki nazwą niezależnego dostawcy oprogramowania (ISV) w następujący sposób: ISVName.verb. Użycie niekwalifikowanych nazw może spowodować kolizje z wieloma dostawcami oprogramowania, które wybrały tę samą nazwę czasownika.
  • Zawsze używaj identyfikatora progID specyficznego dla aplikacji. Ponieważ niektóre typy elementów nie używają tego mapowania, istnieje potrzeba użycia unikatowych nazw dostawcy.
  • Ustaw interfejs użytkownika względem metody wywołującej, ale nie uruchamiaj go w wątku wywołującym.
  • Nie akceptuj wartości zwracanej S_OK dla czasowników kanonicznych przekazanych do metody IContextMenu::InvokeCommand. Spowoduje to, że wywołanie rzeczywistej implementacji czasownika zakończy się niepowodzeniem i zwróci kod błędu dla czasowników kanonicznych. Jeśli nie obsługujesz czasowników kanonicznych, zwracaj błąd, gdy napotkasz niezerową wartość HIWORD(lpVerb).
  • Unikaj używania rundll32.exe jako hosta czasownika.
  • Podczas implementowania IContextMenu::QueryContextMenu należy zwrócić liczbę czasowników, które zostały dodane do menu za pośrednictwem wartości HRESULT przy użyciu makra ResultFromShort.
  • Jeśli zarejestrujesz się w jednym z następujących wpisów klucza rejestru, zachowaj ostrożność i pamiętaj, aby zarejestrować program obsługi w najbardziej konkretnym typie, aby zmniejszyć potencjalnie niezamierzone konsekwencje:
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Folder
    • HKEY_CLASSES_ROOT\Directory
  • Ustaw klucz MayChangeDefaultMenu tylko wtedy, gdy przewidujesz, że konieczna może być zmiana czasownika domyślnego w menu skrótów. Jeśli obsługujący nie zmienia czasownika domyślnego, nie należy ustawiać tego klucza, ponieważ spowoduje to niepotrzebne załadowanie biblioteki DLL przez system.
  • Zminimalizuj pracę wykonywaną w programie IShellExtInit::Initialize. W przypadku programów obsługi menu skrótów przechwyć obiekt danych przekazany do IShellExtInit::Initialize, a następnie przetworzyć go w IContextMenu::QueryContextMenulub IContextMenu::InvokeCommand.

Najlepsze praktyki dotyczące czasowników wielokrotnego wyboru

Ponieważ liczba elementów w scenariuszu z wieloma wyborami czasowników może być duża, należy wziąć pod uwagę implikacje wydajnościowe implementacji czasowników. Na przykład gdy użytkownik wyszukuje tekst "*" w zakresie zawierającym dużą liczbę elementów, a następnie klika Zaznacz wszystko i klika prawym przyciskiem myszy czasownik jest wyświetlany z wyborem, który może zawierać tysiące elementów. W związku z tym czasowniki powinny uwzględniać tylko pierwszy element w zaznaczeniu i ogólną liczbę elementów. Pierwszy element jest definiowany jako element w górnej części widoku lub element, który użytkownik kliknął prawym przyciskiem myszy.

W systemie Windows 7 lub nowszym liczba elementów przekazanych do zlecenia jest ograniczona do 16, gdy zostanie wysłane zapytanie do menu skrótów. Czasownik jest następnie ponownie tworzony i inicjowany z pełnym wyborem po jego wywołaniu.

W niektórych przypadkach należy rozważyć niewielką liczbę stałych elementów. Na przykład dla czasownika "różnice" należy wziąć pod uwagę tylko dwa pierwsze elementy. Ogólnie rzecz biorąc, nie trzeba testować każdego elementu w zaznaczeniu, aby sprawdzić, czy jest to określony typ, lub wykonać zapytanie o każdy element w zaznaczeniu pod kątem jego właściwości. Przyjrzyj się raczej pierwszemu elementowi i zdecyduj, czy jest to właściwe, aby dodać czasownik.

Wybór heterogeniczny

Optymistyczne czasowniki są automatycznie dodawane w przypadku wielokrotnego wyboru, przy założeniu, że niesprawdzone elementy mogą być obsługiwane przez czasownik. Z kolei pesymistyczne czasowniki nie są dodawane, gdy zaznaczenie zawiera niesprawdzone elementy i są dodawane tylko w przypadkach, gdy liczba elementów jest mała.

Czasowniki związane ze stylem gracza powinny być optymistyczne i dyskretnie pomijać nieobsługiwane elementy. Jeśli zaniechanie działań na elementach może spowodować utratę danych lub zamieszanie, polecenie powinno ostrzegać użytkowników o elementach, których nie można przetworzyć. Na przykład czasownik "kopia zapasowa" powinien wskazywać, że nie można utworzyć kopii zapasowej niektórych elementów.

wybieranie czasownika statycznego lub dynamicznego dla menu skrótów

Tworzenie obsługiwaczy menu skrótów

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

menu skrótów (kontekstowych) i programy obsługi menu skrótów

czasowniki i skojarzenia plików

Odnośnik do menu skrótów