Sdílet prostřednictvím


Používání knihoven v programu

Toto téma popisuje některé z věcí, které je potřeba vzít v úvahu při používání knihoven v programu.

V tomto tématu:

Přehled programování knihoven

Knihovny umožňují uživatelům uspořádat obsah založený na souborech způsobem, který jim dává smysl a není omezen organizací systému souborů. Když váš program podporuje knihovny, umožňuje uživateli najít jeho obsah způsobem, který mu dává smysl při prezentování uživatelského rozhraní, které je konzistentní s uživatelským prostředím Windows 7. Knihovny také usnadňují vašemu programu vyhledání obsahu založeného na souborech uložených v různých složkách nebo na různých počítačích.

Témata v této části popisují, jak do programu přidat podporu knihovny a využívat nové funkce, které knihovny nabízejí. Windows 7 ve výchozím nastavení poskytuje některou z těchto možností. Pokud program nezmění běžná dialogová okna souborů, která aktuálně používá, může pro podporu knihoven vyžadovat velmi málo dalšího programování.

Tato část popisuje některé klíčové funkce, které knihovny poskytují a jak je podporují ve vašem programu. Pomocí těchto informací se můžete rozhodnout, které funkce budou poskytovat co nejlepší uživatelské prostředí z vašeho programu. Pokud program přizpůsobí běžná dialogová okna souborů, můžou vám informace v této části pomoct určit, jak používat nová společná dialogová okna souborů k používání knihoven a poskytovat ekvivalentní funkce v systému Windows 7.

Programování s knihovnami

Programovací model prostředí Windows Shell popisuje, jak program komunikuje s programovacími objekty prostředí Windows Shell. Zatímco objekty systému souborů, jako jsou soubory a adresáře, jsou reprezentovány objekty prostředí Windows, ne všechny objekty prostředí Windows, jsou reprezentovány systémem souborů. Knihovny jsou například objekty prostředí Windows, které nemají ekvivalent systému souborů. Použití objektů prostředí Windows Shell ve vašem programu umožňuje, aby váš program přistupoval ke všem objektům prostředí, a ne jenom k objektům systému souborů.

Nejlepších výsledků dosáhnete, když váš program použije rozhraní API knihovny Shellu pro interakci s knihovnami a přístup k jejich obsahu. I když knihovny obsahují položky systému souborů, jako jsou složky a soubory, knihovny nejsou systémové položky souborů. Rozhraní API systému souborů se proto nedají použít pro přístup k funkcím knihovny nebo obsahu knihovny.

Pokud máte existující program, který aktuálně používá mnoho rozhraní API systému souborů, může váš program stále využívat funkce knihovny. Rozhraní API knihovny prostředí může zprostředkovávat reference systému souborů na položky nalezené v knihovně. Tyto reference, jako například název souboru a cesta, lze předat stávajícím rozhraním API systému souborů, která jsou součástí vašeho stávajícího programu.

Přechod ze známých složek do knihoven

Před Windows 7 bylo běžné používat známou složku, jako je složka Dokumenty, jako výchozí složka v operacích ukládání souborů nebo otevření souboru. Ve Windows 7 by se měla použít odpovídající knihovna, aby uživatel měl stejné prostředí ve vašem programu jako v jiných aplikacích windows 7, jako je Průzkumník Windows.

Pokud v programu aktuálně používáte rozhraní API prostředí Windows, přidání podpory knihoven je jednoduché. Pokud například aktuálně voláte funkci SHGetKnownFolderItem pro získání umístění složky Dokumenty, můžete nahradit KNOWNFOLDERID hodnotu známé složky Dokumenty KNOWNFOLDERID hodnotu odpovídající knihovny.

Následující tabulka ukazuje vztah mezi KNOWNFOLDERID hodnoty známých složek a KNOWNFOLDERID hodnotu odpovídající knihovny v systému Windows 7.

Hodnoty známé složky KNOWNFOLDERID Hodnoty knihovní KNOWNFOLDERID
FOLDERID_Documents ID_SLOŽKY_DokumentyKnihovna
FOLDERID_Pictures ID_Složky_Knihovna_Obrázků
FOLDERID_Music FOLDERID_MusicLibrary
FOLDERID_RecordedTV FOLDERID_RecordedTVLibrary

 

Domácí skupina a sdílené knihovny

Přidání podpory knihovny do programu umožní podporu sdílených knihoven v domácí skupině. Domácí skupina je identifikována svou hodnotou KNOWNFOLDERIDFOLDERID_HomeGroup. Program může zjistit privátní nebo sdílené výchozí umístění pro uložení uživatele tím, že nastaví hodnotu DEFAULTSAVEFOLDERTYPE při volání metody IShellLibrary::GetDefaultSaveFolder.

Použití standardního dialogového okna souboru s knihovnami

Použití běžného dialogového okna souboru s knihovnami: Běžné dialogové okno souboru bylo aktualizováno tak, aby podporovalo knihovny ve Windows 7. Následující obrázek ukazuje, jak se uživateli ve Windows 7 zobrazuje běžné dialogové okno souborů.

snímek dialogového okna běžného souboru zobrazující knihovny

Pokud v systému Windows 7 váš program aktuálně zobrazuje běžné dialogové okno souborů a nemění šablonu dialogového okna ani nezachytává žádné z jeho událostí, zobrazí se automaticky nová verze dialogového okna Windows 7. Konkrétně při volání společné funkce souboru dialogové okno lpfnHook, hInstance, lpTemplatename členy struktury OPENFILENAME musí být NULL a OFN_ENABLEHOOK a OFN_ENABLETEMPLATE příznaky musí být nezaškrtnuty.

V systému Windows 7 nahrazují rozhraní IFileDialogsouvisející funkce společného dialogového okna souborů, které byly použity v dřívějších verzích systému Windows. Dřívější běžné funkce dialogového okna souborů jsou stále podporovány ve Windows 7, ale neposkytují kompletní uživatelské prostředí systému Windows 7 a nepodporují knihovny. Mezi nové funkce rozhraní souvisejících s IFileDialogpatří:

  • Uživatel má přístup k vlastnostem souborů podporovaným prostřednictvím Průzkumníka Windows 7, aby vyhledal a vybral soubory.
  • Program může používat rozhraní a metody z Shell namespace API pro práci s položkami.
  • Program může místo modelu přizpůsobení založeného na prostředcích použít model přizpůsobení řízený daty a přidat nové ovládací prvky do běžných dialogových oken souborů.

Měli byste použít IFileDialogrozhraní, když:

  • potřebujete přizpůsobit společné dialogové okno souboru pro váš program ve Windows 7. To umožní vašemu programu pracovat s knihovnami a podporovat přizpůsobení dialogového okna.
  • chcete, aby uživatel mohl vybrat více souborů z běžného dialogového okna soubor. Tím zajistíte, že získáte správné cesty k vybranému objektu, protože knihovna může mít obsah uložený v různých složkách.

Další informace o rozhraních IFileDialognajdete tady:

Povolení výběru knihovny z uživatelského rozhraní

Pokud váš program umožňuje uživateli vybrat složku, například pro funkce importu nebo exportu, ve Windows 7 by měl uživateli umožnit také vybrat knihovnu. Funkce IFileOpenDialog a SHBrowseForFolder umožňuje uživateli vybrat knihovnu po zobrazení výzvy k výběru složky. Rozhraní IFileOpenDialog je upřednostňované před funkcí SHBrowseForFolder, protože IFileOpenDialog podporuje uživatelské rozhraní systému Windows 7.

Pokud chcete uživatelům povolit výběr složek při použití rozhraní IFileOpenDialog, zavolejte SetOptions s nastaveným příznakem FOS_PICKFOLDERS a ujistěte se, že je příznak FOS_FORCEFILESYSTEM jasný.

FILEOPENDIALOGOPTIONS fileOptions;

hr = fileOpenDialogBox->GetOptions(&fileOptions);
fileOptions = fileOptions | FOS_PICKFOLDERS | ~FOS_FORCEFILESYSTEM;
hr = fileOpenDialogBox->SetOptions(fileOptions);

Pokud chcete uživatelům povolit výběr složek při volání funkce SHBrowseForFolder, v členu ulFlags struktury BROWSEINFO nastavte příznak BIF_USENEWUI a vymažte příznak BIF_RETURNONLYFSDIRS.

BROWSEINFO    browseInfo;
browseInfo.ulFlags = BIF_USENEWUI | ~BIF_RETURNONLYFSDIRS;
// Set other member values
pidl = SHBrowseForFolder(&browseInfo);

Přístup k obsahu knihovny v programu

Pokud chcete získat přístup k obsahu knihovny, musíte použít rozhraní API prostředí Windows. Funkce rozhraní API systému souborů nelze použít pro přístup k obsahu knihovny, protože knihovny nejsou objekty systému souborů. Pokud váš program používá vlastní prohlížeč souborů založený na rozhraní API systému souborů, nebude moct procházet knihovny ani přistupovat k obsahu knihovny.

Tato část popisuje, jak získat přístup k obsahu knihovny, abyste mohli vybrat nejlepší způsob, jak aktualizovat program tak, aby fungoval s knihovnami.

Přístup k obsahu knihovny pomocí rozhraní IShellLibrary

Nejjednodušší způsob, jak program získat přístup k obsahu knihovny, je použít rozhraní API knihovny Shell. Pokud pracujete na programu, který používá rozhraní API systému souborů, může rozhraní API knihovny Shell Library vrátit složky systému souborů knihovny, což minimalizuje změnu stávajícího kódu programu.

IShellLibrary *picturesLibrary;

hr = SHLoadLibraryFromKnownFolder(FOLDERID_PicturesLibrary, 
                                  STGM_READ, 
                                  IID_PPV_ARGS(&picturesLibrary));

// picturesLibrary now points to the user's picture library
    
IShellItemArray *pictureFolders; 

hr = pslLibrary->GetFolders(LFF_FORCEFILESYSTEM, IID_PPV_ARGS(&pictureFolders));

// pictureFolders now contains an array of Shell items that
// represent the folders found in the user's pictures library

Přístup k obsahu knihovny pomocí rozhraní Shell API

Vzhledem k tomu, že objekty knihovny jsou součástí programovacího modelu prostředí, lze je použít s jinými rozhraními API prostředí Windows. Můžete například použít rozhraní IShellItem a IShellFolder rozhraní ve vašem programu spolu s souvisejícími pomocnými funkcemi pro přístup k obsahu knihovny stejným způsobem jako vyčíslení složek a obsahu složek pro přístup k obsahu pomocí rozhraní API systému souborů.

Rozhraní API prostředí Windows podporují dva režimy výčtu pro přístup k obsahu knihovny:

  • procházení výčtu

    Režim procházení je výchozí metodou a zobrazuje obsah složky knihovny. Chcete-li použít tento režim, vymažte příznak SHCONTF_NAVIGATION_ENUM.

  • navigace výčtu

    Navigační výčet obsahuje výčet složek knihovny. Nastavte příznak SHCONTF_NAVIGATION_ENUM tak, aby používal tento režim.

Pokud váš program používá vlastní ovládací prvek stromu k navigaci ve složkách uživatele, výčet složek v režimu výčtu navigace vám poskytne seznam složek knihovny, které jsou konzistentní s tím, jak Průzkumník Windows vyčísluje složky ve Windows 7.

Příklady použití těchto funkcí v programu najdete v ukázce ShellStorage v sadě Windows SDK.

Ukládání uživatelského obsahu do knihovny

Program může uložit uživatelský obsah do knihovny i do složky v knihovně. Stejně tak může uživatel uložit do konkrétní složky v knihovně nebo ho může jednoduše uložit do knihovny.

Každá knihovna má složku, která je určená jako výchozí umístění pro ukládání. Výchozí umístění pro uložení je definováno při vytvoření knihovny; uživatel však může změnit přiřazení výchozího umístění pro uložení jako libovolnou složku v knihovně. Uživatel sice nemusí konfigurovat výchozí umístění pro ukládání, ale může ho změnit. Pokud uživatel odstraní složku, která je aktuálně nastavená jako výchozí umístění pro ukládání, knihovna automaticky nakonfiguruje další složku v knihovně tak, aby byla výchozím umístěním pro uložení.

Obsah uživatele můžete uložit do knihovny několika způsoby.

  • rozhraní API pro Shell

    Pokud používáte programovací model prostředí a uložíte položku prostředí, jak je znázorněno IShellItem, IStorage nebo IStream, do objektu knihovny, položka Prostředí se automaticky uloží do výchozího umístění pro uložení knihovny.

  • rozhraní API systému souborů

    Pokud máte existující program, který používá mnoho volání rozhraní API systému souborů, můžete získat cestu ke složce, která je definována jako výchozí umístění pro ukládání knihovny. Cesta ke složce se pak dá předat do rozhraní API systému souborů.

Příklady použití těchto funkcí v programu najdete v ukázce ShellStorage v sadě Windows SDK.

Podpora operací přetažení a puštění v knihovně

Pokud váš program podporuje akce přetažení myší, měly by se aktualizovat, aby podporovaly správnou interakci s knihovnou. Pokud se soubor vloží do knihovny, měl by se vložený soubor uložit do výchozího umístění pro ukládání. Pokud je složka vyřazena do knihovny, měla by být vyřazená složka přidána jako nová složka do knihovny. Pokud se soubor zahodí do existující složky, která není výchozím umístěním pro uložení, soubor by se měl přidat do vybrané složky.

Příklady přidání podpory knihovny pro funkcionalitu přetahování ve vašich programech naleznete v ukázce ShellLibraryCommandLine v sadě Windows SDK.

Synchronizace s knihovnou

Toto téma popisuje, jak může program zachovat jeho zobrazení obsahu knihovny up-to-date.

Hromadná aktualizace

Vzhledem k tomu, že uživatel může interaktivně upravovat složky knihovny, když program není spuštěný, měl by program volat SHResolveLibrary, když začne zjišťovat a ukládat všechny změny v knihovně. Rozhraní SHELL API poskytuje funkci SHResolveLibrary, která umožňuje programu získat aktuální obsah knihovny a aktuální umístění všech složek, které může knihovna obsahovat.

Všimněte si, že SHResolveLibrary je blokující funkce, která může trvat dlouhou dobu, než se vrátí v závislosti na tom, co se v knihovně změnilo. Proto by se nemělo volat z vlákna uživatelského rozhraní.

Po přenesení programu up-to-date se pak může zaregistrovat k oznámením o změnách, aby se zachovalo aktuální zobrazení.

Oznámení rozhraní API shellu

Rozhraní API prostředí Windows poskytuje funkci SHChangeNotifyRegister, což je upřednostňovaný způsob, jak informovat procesy, které nejsou službami, o změně v knihovně.

Pokud chcete zjistit změny položek v knihovně pomocí rozhraní API prostředí Windows, zavolejte SHChangeNotifyRegister zaregistrujte program pro oznámení o změnách položek ve složce knihovny. Tato funkce může upozornit program, pokud dojde ke změně v jakékoli knihovně nebo jen v konkrétní knihovně. Oznámení se po změně knihovny odešlou okamžitě.

Oznámení rozhraní API systému souborů

Oznámení systému souborů musí být použita v procesech služeb.

Pokud chcete zjistit změny položek v knihovně pomocí rozhraní API systému souborů, vytvořte výčet složek v knihovně a volejte FindFirstChangeNotification pro každou složku, která se má monitorovat. Program obdrží oznámení, když se změní monitorovaná složka. Chcete-li najít konkrétní soubor souborů, které se změnily ve složce, zavolejte ReadDirectoryChangesW. Pokud chcete zjistit změny v souboru popisu knihovny, sledujte složku, která ji obsahuje. Soubor popisu knihovny najdete ve složce FOLDERID_Libraries. Soubor s popisem knihovny by se ale neměl otevírat ani upravovat.

o knihovnách

IShellLibrary

shell links

známých složek

schéma popisu knihovny

IID_PPV_ARGS