Программируем панель задач Windows 7 (ч.1)

Напечатать страницу
16.06.2009 11:16 | deeper2k

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

Первое что бросается в глаза при работе с Windows 7 - это, конечно, обновленный task bar. В новом taskbar’е действительно много концептуальных изменений. Одно из таких изменений - возможность отображения прогресса выполнения задачи (progress bar).



На этом рисунке хорошо видно, что прямо на панели задач отображается информация о процессе копирования. Такая функциональность реализована в Windows 7 для копирования файлов на диске, загрузке данных из сети (IE8). Однако, важно, что эту функциональность мы можем использовать и для своих приложений. Сценариев может быть огромное количество - отображение процесса преобразования, копирования, формирования данных, построение отчетов, генерация изображений, и т.д.

С точки зрения разработчика клиентских приложений для Windows, процесс использования данной функциональности представляется достаточно просто. Взаимодействие с ОС происходит на unmanaged уровне, поэтому для .NET приложений необходима реализация управляемых оберток. Всю эту работу уже проделали разработчики из Microsoft и поместили это в библиотеку .NET Interop Sample Library.

Библиотека .NET Interop Sample Library состоит из множества компонентов и демонстрационных приложений. Мы не будем подробно останавливаться на каждом из них. Для нас важно, что в ее состав входит Vista Bridge Sample Library, Windows7.DesktopIntegration и Windows7.DesktopIntegration.Registration.

Проект "Windows7.DesktopIntegration" содержит те классы, которые необходимы нам для работы с taskbar’ом. В составе этого проекта есть класс WindowsFormsExtensions, который содержит набор методов расширения (extension methods) для класса Form (Windows Forms). В нашем случае нас интересуют сдледующие методы:

  • SetTaskbarProgress(float percent)
  • SetTaskbarProgressState(ThumbnailProgressState state)


Вызов первого метода позволяет указать процент выполнения текущей задачи. Т.к. это методы расширения для класса Form, то этот класс передается в метод в качестве параметра. Это необходимо для того, чтобы определить handle окна, для которого выполняются действия.

// процесс выполнения = 35%

// вызов метода расширения
WindowsFormsExtensions.SetTaskbarProgress(this, 35);

// или так
(this = Form)this.SetTaskbarProgress(35);

SetTaskbarProgress(35);[/code]
У нас также имеется возможность указать состояние прогресс-бара. Доступные состояния:

  • NoProgress - прогресс не отображается
  • Indeterminate - прогресс бар постоянно мерцает
  • Normal - обычное отображение прогресса
  • Error - отображение ошибки
  • Paused - отображение паузы


Задание состояние прогресс-бара осуществляется при помощи второго метода.

[code]WindowsFormsExtensions.SetTaskbarProgressState(this, Windows7Taskbar.ThumbnailProgressState.Normal);

// или так

this.SetTaskbarProgressState(Windows7Taskbar.ThumbnailProgressState.Normal);[/code]
К сожалению, методы расширения существуют только для WinForms приложений. Однако, несложно построить подобный класс и для WPF приложений (см. демо-приложение).

В итоге я собрал небольшое приложение, которое демонстрирует возможности прогресс-бара в панели задач Windows 7. Выглядит оно следующим образом.



С помощью управляющих кнопок мы можем указать текущее значение прогресс-бара, а также можем выбрать его состояние.


Режим "Normal"


Режим "Indeterminate"


Режим "Error"


Режим "Paused"



Загрузить демо-приложение Taskbar-Progress можно отсюда. Удачи вам в разработке ваших приложений для Windows 7!

Sergey Zwezdin, TheVista.Ru Team
Microsoft Most Valuable Professional, Microsoft Regional Director
июнь 2009

Комментарии

Не в сети

демо-приложение Taskbar-Progress

И как им пользоваться?!

16.06.09 13:32
0
Не в сети

Для начала установить Visual Studio и скомпилировать проект.

16.06.09 15:01
0
Не в сети

Полезная статья, с нетерпением жду новых решений!

16.06.09 15:27
0
Не в сети

Хорошая статья. Однако фраза "Взаимодействие с ОС происходит на unmanaged уровне, поэтому для .NET приложений необходима реализация управляемых оберток" взрывает моск и рвёт в тапки. Можно попросить оригинал?

16.06.09 17:00
0
Не в сети

ээ... возможно ли реализовать отображение процесса загрузки в Файрфоксе?

16.06.09 18:54
0
Не в сети

я не помню на каком языке написан FF, но в любом случае тебе придется его перекомпилировать самому. либо писать плагин на .NET. либо связаться с авторами DownThemAll! и более-менее подробно изложить им содержание этой статьи

16.06.09 20:04
0
Не в сети

на хабре уже все 8 (или сколько их) частей разместили, почему здесь только сейчас?

16.06.09 20:34
0
Не в сети

paxeeait, это оригинал статьи. Автор - русский.
Freto, потому что теперь Сергей Звездин является свободным автором на нашем сайте. В дополнение к новым статьям мы опубликуем все старые, касающиеся практического программирования.

16.06.09 20:46
0
Не в сети

шикарно! очень нравятся его статьи!

16.06.09 21:28
0
Не в сети

Коллеги, спасибо за ваши отзывы.

aabaab, запустите приложение и попробуйте изменять параметр - на прогресс-баре будет отображаться текущее значение

paxeeait, почему взрывает мозг? Я предполагал, что для разработчиков будет понятна такая стилистика. Разве нет?

kSL82, возможно. Но это должна сделать Mozilla Foundation

Freto, thevista никак не связана с хаброй.

17.06.09 14:10
0
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
160.23 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Мы на Facebook
Мы ВКонтакте
В сервисе IPANN.NET купить прокси для SEO и SMM
Все права принадлежат © MSInsider.ru (ex TheVista.ru), 2019
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.111 секунд (Общее время SQL: 0.069 секунд - SQL запросов: 52 - Среднее время SQL: 0.00133 секунд))