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.
Tematy pokrewne
-
wybieranie czasownika statycznego lub dynamicznego dla 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