Click here to Skip to main content
14,265,813 members

Windows 7 Libraries C# Quick Reference

Rate this:
4.87 (15 votes)
Please Sign up or sign in to vote.
4.87 (15 votes)
16 Mar 2010Ms-PL
Following are some listings to be used as a quick reference to common Windows 7 Libraries features using Windows API Code Pack.

Following are some listings to be used as a quick reference to common Windows 7 Libraries features using Windows API Code Pack.

The code in this post is based on previous work by Alon and other Sela team members. Great work all.

Forward

Just to clarify the terminology used: Every Windows 7 library is represented as an XML file with the .library-ms extension. The common libraries files are commonly stored in: C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Libraries\

So if, for example, we work now with the Pictures library, than in the following sections:

libraryName = Pictures 
locationPath = C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Libraries\

Note: you can create library files wherever you want, not necessarily in the mentioned folder.

Features

Creating a new library

ShellLibrary shellLibrary = 
    new ShellLibrary(libraryName, locationPath, overwriteExisting);

Add folder to an existing library

using (ShellLibrary shellLibrary =
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    shellLibrary.Add(folderToAdd);
}

Remove folder from a library

using (ShellLibrary shellLibrary =
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    shellLibrary.Remove(folderToRemove);
}

Enumerate library folders

using (ShellLibrary shellLibrary = 
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    foreach (ShellFileSystemFolder folder in shellLibrary)
    {
        Debug.WriteLine(folder.Path);
    }
}

Change default save location

using (ShellLibrary shellLibrary = 
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    shellLibrary.DefaultSaveFolder = newSaveLocation;
}

Change library icon

using (ShellLibrary shellLibrary = 
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    shellLibrary.IconResourceId = new IconReference(moduleName, resourceId);
}

Pin library to explorer navigation pane

using (ShellLibrary shellLibrary = 
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    shellLibrary.IsPinnedToNavigationPane = true;
}

Setting library type

using (ShellLibrary shellLibrary = 
    ShellLibrary.Load(libraryName, folderPath, isReadOnly))
{
    shellLibrary.LibraryType = libraryType;
    
    // libraryType can be:
    //  LibraryFolderType.Generic
    //  LibraryFolderType.Documents
    //  LibraryFolderType.Music
    //  LibraryFolderType.Pictures
    //  LibraryFolderType.Videos
}

Open library manage UI

ShellLibrary.ShowManageLibraryUI(
    libraryName, folderPath, hOwnerWnd, title, instruction, allowNonIndexableLocations);

Delete library

string FileExtension = ".library-ms";

File.Delete(Path.Combine(folderPath,libraryName + FileExtension));

Get library change notification

string FileExtension = ".library-ms";

FileSystemWatcher libraryWatcher = new FileSystemWatcher(folderPath);
libraryWatcher.NotifyFilter = NotifyFilters.LastWrite;
libraryWatcher.Filter = libraryName + FileExtension;
libraryWatcher.IncludeSubdirectories = false;

libraryWatcher.Changed += (s, e) =>
{
    //cross thread call
    this.Dispatcher.Invoke(new Action(() =>
        {
            using (ShellLibrary shellLibrary = 
                ShellLibrary.Load(libraryName, folderPath, isReadOnly))
            {
                // get changed information
                ...
            }
        }));
};
libraryWatcher.EnableRaisingEvents = true;

That’s it for now, Arik Poznanski.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

Share

About the Author

Arik Poznanski
Software Developer (Senior) Verint
Israel Israel
Arik Poznanski is a senior software developer at Verint. He completed two B.Sc. degrees in Mathematics & Computer Science, summa cum laude, from the Technion in Israel.

Arik has extensive knowledge and experience in many Microsoft technologies, including .NET with C#, WPF, Silverlight, WinForms, Interop, COM/ATL programming, C++ Win32 programming and reverse engineering (assembly, IL).

Comments and Discussions

 
NewsShellLibrary.Dispose() Pin
Focuscar15-Mar-11 16:02
memberFocuscar15-Mar-11 16:02 
QuestionGet Library Change notification - questions Pin
freestone_girl28-Feb-11 23:22
memberfreestone_girl28-Feb-11 23:22 
GeneralNice article. Pin
ybkishore30-Dec-10 17:12
memberybkishore30-Dec-10 17:12 
GeneralRe: Nice article. Pin
Arik Poznanski1-Jan-11 13:17
memberArik Poznanski1-Jan-11 13:17 
Yes. Using the Windows API Code Pack and Windows 7 Library API you can probably accomplish this task.

Best of luck,
Arik Poznanski.
Arik Poznanski

Generalmy 5 Pin
Southmountain25-Nov-10 11:28
memberSouthmountain25-Nov-10 11:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Technical Blog
Posted 15 Mar 2010

Tagged as

Stats

30K views
16 bookmarked