Obslužné moduly náhledu a hostitel náhledu Shell

Obslužné rutiny náhledu se volají, když je vybrána položka, aby se zobrazil lehký, bohatý náhled jen pro čtení obsahu souboru v podokně pro čtení zobrazení. To se provádí bez spuštění přidružené aplikace souboru.

Toto téma popisuje následující témata:

Architektura obslužné rutiny ve verzi Preview

Obslužná rutina pro náhled je hostovaná aplikace. Hostitelé zahrnují Průzkumníka Windows v systému Windows Vista nebo Microsoft Outlook 2007. Hostitelé implementují IPreviewHandlerFrame jako metodu komunikace mezi náhledovým zpracovatelem a hostitelem.

Obslužná rutina náhledu implementuje tato rozhraní:

Obslužná rutina se volá prostřednictvím svého IObjectWithSite, který vrátí IUnknown ukazatel, pomocí kterého požadujete IPreviewHandlerFrame objekt pro interakci s hostitelem.

Možnosti modelu serveru

Obslužné rutiny ve verzi Preview vždy dochází k procesu. Existují dvě metody implementace:

  1. Obslužnou rutinu verze Preview lze sestavit jako procesový server, ale spustit přes náhradního hostitele mimo proces. Toto je upřednostňovaná metoda. Systém poskytuje náhradního hostitele pro toto v souboru Prevhost.exe. Obslužné rutiny náhledu vytvořené touto metodou nejsou kompatibilní s aplikací Outlook 2007 v systému Windows XP. Tyto stejné obslužné rutiny ale budou fungovat v Průzkumníku Windows a Outlooku 2007 spuštěném v systému Windows Vista.
  2. Obslužnou rutinu verze Preview lze sestavit jako místní server modelu COM (Component Object Model). To se nedoporučuje z několika důvodů. Za prvé, implementace procesového serveru je jednodušší. Důležitější je, že implementace jako server v procesu poskytuje větší kontrolu nad životností objektu obslužné rutiny, což umožňuje efektivnější úklid a vyšší účinnost.

Ve výchozím nastavení se obslužné rutiny preview spouštějí v procesu nízké integrity (IL) z bezpečnostních důvodů. Volitelně můžete zakázat spuštění jako nízký proces IL nastavením následující hodnoty v registru. Nedoporučuje se to ale dělat. Systémy můžou být nakonec nakonfigurované tak, aby odmítaly jakýkoli proces, který není nízký IL.

HKEY_CLASSES_ROOT
   CLSID
      {YOUR HANDLER'S CLSID}
         DisableLowILProcessIsolation [DWORD] = 1

Různé náhledové obslužné rutiny ve výchozím nastavení sdílejí stejný proces. Současně mohou běžet dvě instance Prevhost.exe; jedna pro obslužné rutiny běžící jako procesy s nízkou IL a druhá pro obslužné rutiny, které se rozhodly toto chování nepoužívat.

Inicializace

Stejně jako u manipulátorů miniatur a vlastností důrazně doporučujeme, abyste manipulátor inicializovali pomocí proudu. V případě potřeby můžete inicializovat soubor nebo položku, ale datové proudy poskytují nejbezpečnější způsob implementace obslužné rutiny. Inicializace prostřednictvím datového proudu zajišťuje integritu souboru a výhody stability systému spouštění obslužné rutiny jako nízkého procesu IL, jako je ochrana systému před přetečením vyrovnávací paměti, omezení, kde obslužná rutina může zapisovat informace a omezovat komunikaci s jinými okny.

Pokud je nutné inicializovat soubor nebo položku prostředí, uložte cestu k souboru nebo odkaz na IShellItem. Nečtěte data z těchto zdrojů, dokud není zavolána IPreviewHandler::DoPreview.

Inicializace by obecně neměla provádět žádné náročné práce, jako je psaní a ukládání obrázku ve verzi Preview. Pro zajištění optimální efektivity by se toto zpracování nemělo provádět, dokud se nevyvolá verze Preview.

Tok dat pro náhled obslužné rutiny

Tok dat v procesu preview se řídí obecnou cestou, která je zde uvedená. Hostitele si můžete představit jako Průzkumníka Windows v systému Windows Vista nebo Outlooku 2007.

  1. Obslužná rutina náhledu se inicializuje, nejlépe s datovým proudem.
  2. Okno zobrazení se předává z hostitele obslužné rutině prostřednictvím IPreviewHandler::SetWindow.
  3. V tomto okamžiku by obslužná rutina neměla dělat nic dalšího, dokud nebude zavolána IPreviewHandler::DoPreview.
  4. Náhled se zobrazí v podokně čtení prostřednictvím volání IPreviewHandler::DoPreview.
  5. Velikost okna je nastavena prostřednictvím IPreviewHandler::SetRect.
  6. Velikost okna se v případě potřeby mění prostřednictvím IPreviewHandler::SetRect.
  7. Verze Preview je uvolněna a její prostředky uvolněny, když už není potřeba, prostřednictvím volání IPreviewHandler::Unload.

Ladění handleru náhledu

Pokud jste postupovali podle doporučení k implementaci obslužné rutiny preview jako procesového serveru, abyste mohli ladit obslužnou rutinu preview, můžete se připojit k Prevhost.exe. Jak už bylo zmíněno dříve, mějte na paměti, že můžou existovat dvě instance Prevhost.exe, jedna pro běžné procesy nízké úrovně IL a jedna pro ty obslužné programy, které se rozhodly běžet mimo nízké procesy úrovně IL.

Pokud v seznamu dostupných procesů nenajdete Prevhost.exe, pravděpodobně nebyl v tomto okamžiku načten. Kliknutím na soubor pro náhled se načte náhradní soubor a měl by se zobrazit jako připojitelný proces.

Poskytnutí vlastního procesu pro zobrazovací modul preview

Pokud chcete vynutit vytvoření nového procesu pro obslužnou rutinu místo spuštění pod výchozím procesem, vytvořte nový podklíč pro obslužnou rutinu v části AppID a nastavte její položku DllSurrogate na "Prevhost.exe". Místo výchozího Prevhost.exe AppIDpoužijte AppID.

Zadáním nového procesu se obslužná rutina může vyhnout spuštění ve sdíleném procesu, jak by to ve výchozím nastavení dělalo. To vám například umožní zajistit v procesu konkrétní verzi modulu CLR (Common Language Runtime). To se vyžaduje, pokud vytváříte spravovanou implementaci obslužné rutiny preview.

Poznámka

32bitové obslužné rutiny preview by měly používat AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} při instalaci v 64bitových operačních systémech.

 

Zobrazovače náhledu

Registrace obslužné rutiny náhledu

Pokyny pro obslužný program náhledu