Библиотеки Windows 7 — управляемый код

Автор: Topol Четверг, Май 3rd, 2012 Нет комментариев

Рубрика: Операционные системы

Вот и подошло к концу наше продолжительное погружение в программные интерфейсы библиотек Windows 7 и их архитектуру. Осталось лишь поговорить об управляемых API для работы с библиотеками Windows 7. Напомню, что до этого мы успели обсудить предназначение библиотекWindows 7 , обсудили то, что происходит за кулисами библиотек, о том, как научить приложение работать с библиотеками Windows 7, поговорили об использовании содержимого библиотек Windows 7, о синхронизации библиотек и вспомогательных функциях для библиотек Windows 7.

В данной статье мы сконцентрируем внимание на управляемых API для работы с библиотеками Windows 7. Windows API Code Pack для Microsoft .NET  Framework Library (для краткости Windows API Code Pack) предусматривает .Net-интерфейс для встроенных Windows API, делая доступными 7 ключевых функций доступа в Windows 7, а также использование более продвинутых способов интеграции в оболочку, о которых мы говорили чуть раньше. Загрузить Windows Code Pack API можно отсюда.

Windows API Code Pack обладает очень удобным управляемым интерфейсом к оболочке Windows. ShellLibrary (как элемент Microsoft.WindowsAPICodePack.Shell dll, которую вам надо добавить в качестве ссылки на ваше .net-приложение, чтобы работать с Windows 7) — это единственный объект, представляющий библиотеки. Вышеприведенное изображение показывает классы ShellLibrary.

Теперь можно приступать к работе с библиотеками. Для начала нужно создать объект Library, используя один из четырех доступных конструкторов. Вы можете воспользоваться конструктором, который в качестве параметра использует Known Folder. Это упростит разработчикам обслуживание кода. Но имейте в виду, что большинство конструкторов получают параметр overwrite в булевых величинах. Удостоверьтесь в том, что вы не перезаписываете уже существующую папку «Documents» или другую библиотеку, поскольку при создании нового ShellLibrary-объекта библиотечный XML-файл сохраняется в папку библиотеки, описанную параметром Known Folder, о которой мыуже говорили. Следующая строка создает новый ShellLibrary- объект, тем самым создавая новую библиотеку:

Код:
ShellLibrary library = new ShellLibrary(«new test lib1″, true);

Если вам не нужно создавать новую библиотеку, вы можете загрузить существующую библиотеку для получения необходимого ShellLibrary-объекта. Имейте в виду, что все функции загрузки являются статическими и не требуют копии существующего ShellLibrary-объекта. Последним параметром любой загружаемой функции является isReadOnly в булевом формате, когда требуется прочитать содержание библиотеки, не изменяя его. Так, к примеру, приложению, которое осуществляет резервное копирование всех библиотек, не требуется вносить изменения в библиотеки. Следующий фрагмент кода — это все, что нужно для загрузки существующей библиотеки:

Код:
ShellLibrary library = ShellLibrary.Load(«My Pictures», true);

Хорошо, теперь у нас есть ShellLibrary-объект. Что с ним делать дальше? Есть несколько способов позабавиться с библиотеками. Во-первых, можно добавить или удалить папки из конкретной библиотеки. Помните, что библиотеки являются лишь абстрактными хранилищами, в которых нет файлов и которые просто указывают на папки, которые хранят файлы. И об этом мы, кстати, уже говорили. Чтобы добавить папку, просто вызовите функцию Add, для удаления — функцию remove. Вы можете добавлять и удалять папки с помощью строкового параметра или с использованием объекта FileSystemFolder, как показано в следующем фрагменте кода:

Код:
public void Add(FileSystemFolder item);
public void Add(string folderPath);
public bool Remove(FileSystemFolder item);
public bool Remove(string folderPath);

Кроме управления папками в вашей библиотеке, вы можете также установить место сохранения по умолчанию, используя свойство DefaultSaveFolder. Если предположить, что library является объектом ShellLibrary, следующий фрагмент кода вернет место сохранения по умолчанию:

Код:
String dsfStr = library.DefaultSaveFolder

Обратите внимание, что при установке места сохранения по умолчанию, вам необходимо указать реально существующую папку, для которой у вас есть разрешения на чтение/запись. Если эта папка не включена в состав библиотеки, она будет добавлена в библиотеку и станет местом для сохранения по умолчанию. Как разработчик, вы можете также добавить неподдерживаемые адреса папок, которые не индексируются или не могут быть проиндексированы.

Еще одна весьма интересная функция — это управление иконкой библиотеки. Это одна из тех функций, к которым конечные пользователи доступа не имеют, хотя она настолько проста в использовании, как это показано в следующем фрагменте кода:

Код:
library.IconResourceId = new IconReference(icon);

Необходимо получить объект IconReference и после этого потребуется изменить стандартную иконку и установить свою собственную. Еще одна забавная функция, с которой стоит поиграть:

Еще одной важной особенностью объекта ShellLibrary является возможность перечисления всех элементов и папок библиотеки. В ShellLibrary-объекте предусмотрен интерфейс IList <FileSystemFolder>, поддерживающий перечисление папок в библиотеке через функцию GetEnumerator или с помощью оператора foreach, как показано в следующем фрагменте кода, который выводит на печать имя папки и место сохранения по умолчанию:

Код:
foreach (ShellFolder folder in library)
{
Console.WriteLine(
«\t\t{0} {1}»,
folder.Name,
defaultSaveFolder == folder.Name ? «*» : «»)
}

С помощью свойства LibraryType вы можете управлять типом библиотеки, а с помощью свойства IsPinnedToNavigationPane можно прикрепить библиотеку к левой навигационной панели Windows Explorer.

Теперь поговорим об отображении окна менеджера библиотек. Очень важно выводить это окно, если вы хотите обеспечить полноценный опыт для управления библиотеками и приложениями. Поскольку менеджер библиотек отображает диалоговое окно в существующем приложении, нужно принимать во внимание технологии, используемые приложением. Функция ShowManageLibraryUI может вызвать окно обработчика Win32 (whnd), работающее с Windows Forms или WPF-объект для работы с WPF.

Код:
library.ShowManageLibraryUI(IntPtr.Zero, «title of dialog», «help text…», true);

И в заключение несколько слов об удалении библиотеки. В объекте ShellLibrary не предусмотрено механизма самоуничтожения, поэтому вы не сможете удалить библиотеку, используя ShellLibrary. Чтобы удалить библиотеку, необходимо удалить XML-файл описания библиотеки. Ниже приведен фрагмент кода:

Код:
public static void DeleteLibrary(string name)
{
string librariesPath = Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData),
ShellLibrary.LibrariesKnownFolder.RelativePath);

string libraryPath = Path.Combine(librariesPath, name);
string libraryFullPath = Path.ChangeExtension(libraryPath, «library-ms»);

File.Delete(libraryFullPath);
}

Как видите, вначале мы использовали комбинацию Environment.SpecialFolder.ApplicationData и the ShellLibrary ShellLibrary.LibrariesKnownFolder.RelativePath, чтобы собрать папку, где хранятся все файлы описаний. Затем добавляем расширение library-ms к папке и удаляем файл. Удаляя файл, удаляем библиотеку, поэтому будьте внимательны и не удалите нужные библиотеки.

Мы рассказали обо всех важнейших функциях управляемых API для библиотек Windows 7. Это и все предыдущие статьи по теме должны были обеспечить понимание принципов работы библиотек, а также способы их использования в приложениях.

Кроме того, при желании вы можете получить первый опыт программирования для Windows 7, ознакомившись с примерами, входящими в состав обучающей документации для разработчиков Windows 7. Документация включает все описанные в данной статье примеры, так что вперед, загружайте документацию поскорее и приступайте к программированию!

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты