То, что должно быть в каждом пакете, – пакет кода Windows API


Грэг Дункан

Сегодняшний проект может и не является землекрушительным или «проектом за гранью», но может оказаться полезным большинству из вас. Он поможет использовать преимущества Windows OS более простым, легким и дружелюбным способом.

Скажем, вы создаете приложение, которому требуется доступ к метаданным файла, например, к метаданным изображения? геоположению, относительной апертуры, камеры? или музыкальным метаданным? видео?

Роб Сандерс (Rob Sanders) покажет нам как…

Извлечение метаданных файла с помощью C# и .NET Framework

Введение

В выходные я решил попробовать импортировать метаданные изображения, используя C# и .NET Framework. Помимо «нормальных» атрибутов файла, таких как дата изменения и размер, Windows Explorer (оболочка) предоставляет расширенную информацию о файле, которая может быть востребована.

Вопрос в том, как извлечь эту информацию, принимая во внимание, что у .NET Framework весьма ограниченная поддержка для такого типа выборки? Читайте статью, чтобы узнать, как это сделать.

В моем конкретном случае требовалось получить расширенные свойства, имеющие отношение к фотографии, а именно, скорость ISO, относительную апертуру, фокусное расстояние, размеры и т. д. Каждое свойство имеет идентификатор, который модно использовать, чтобы получить требуемые данные. Это можно сделать из .NET для некоторых видов информации, как показано здесь.

Поэтому можно получать больше информации вроде этой, используя механизм взаимодействия Win32 и напрямую активизируя вызовы оболочки из C#/ .NET, но этот способ требует много времени, не говоря о трудоемкости, заключающейся в необходимости отслеживать при его использовании правильные интерфейсы Win32 API и идентификаторы свойств объектов. Есть ли более простой путь?

Введение в Windows API Code Pack

К счастью, кое-кто уже сделал за нас эту работу, достигшую кульминации в крайне полезном пакете Windows API Code Pack, последнюю версию которого можно получить по ссылке.

В пакете содержится документация, примеры, откомпилированный и исходный код.

Получение данных о расширенных свойствах

Одной из самых замечательных особенностей пакета является факт, состоящий в том, что кто-то сопоставил все значения расширенных свойств со строго типизированными определениями, что сохранит нам кучу времени и сил.

Например, имея полностью определенное имя файла и путь фотографии, можно получить расширенную информацию о файле (производитель камеры и ее модель), используя следующий код:

Использование пакета

Основываясь на вышеизложенном, проще простого вытащить данные о расширенных свойствах фотографии. Я написал небольшую утилиту, чтобы продемонстрировать, как напрямую извлечь необходимые данные. Потребуются две сборки пакета: Microsoft.WindowsAPICodePack.dll и Microsoft.WindowsAPICodePack.Shell.dll.

Вот полный дамп использованного кода:

Заключение

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

Windows® API Code Pack для Microsoft® .NET Framework

Windows® API Code Pack для Microsoft® .NET Framework представляет собой библиотеку с открытым исходным кодом, которую можно использовать для получения доступа к некоторым параметрам Windows 7 и Windows Vista из управляемого кода. Сейчас эти возможности Windows недоступны разработчикам в .NET Framework.

Конкретные возможности, поддерживаемые в текущей версии (1.1) библиотеки:

· Панель задач Windows 7

§ Списки переходов (Jump Lists), дополнительные значки (Icon Overlay), индикатор выполнения (Progress Bar), вложенные эскизы (Tabbed Thumbnails) и панели инструментов для эскизов (Thumbnail Toolbars)

    • Оболочка Windows

o Библиотеки Windows 7

o Поддержка API поиска Windows Shell

o Управляющий элемент Explorer Browser

o Иерархия сущностей Shell Namespace

o Система свойствWindows Shell

o Перетаскивание для объектов Shell

o Общие файловые диалоги Windows Vista и Windows 7, включая настраиваемые элементы управления

o Предопределенные папки и контейнеры нефайловой системы

o Просмотрщик объектов оболочки

o Поддержка API расширений оболочки

· DirectX

o API Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite и Windows Imaging Component (WIC)

· Диалоги задач Windows Vista и Windows 7

· API платформы сенсоров

· API расширенных лингвистических сервисов

· API управления питанием

· API рестарта и восстановления приложений

· API управляющей программы списка сетей

· Управляющий элемент Command Link и определенная в системе иконка оболочки Shell

Что нового в данном обновлении (v1.1):

В этом обновлении пакета сделаны следующие усовершенствования:

· Можно обращаться ко многим нарушениям FxCop и предупреждениям PREfast

· Исправлены ошибки в разных примерах и функциях

o Включая многие улучшения API

· Новые функции

o Просмотрщик объектов оболочки (Shell Object Watcher)

o API обработчика предпросмотров (Preview Handler APIs)

o API обработчика миниатюр (Thumbnail Handler APIs)

· Новые примеры для новых функций

· Совместимость с Visual Studio 2010

· Покрытие тестов xUnit

· Локализация строк

· Подписанные сборки

Вот снимок примеров, полученный с помощью утилиты WinDirStat

clip_image001

Так как мы сфокусировались на свойствах, вот часть из них, приведенная в документации:

clip_image003

И, специально, свойства для фотографий:

clip_image005

Да, здорово. И это только верхушка архива пакета.

Кстати, я работаю на Windows 8.1 и VS 2013, и примеры работают у меня прекрасно…

Image Credit: Global NerdyWindows API Code Pack for .NET Framework Released

Comments (0)