Официальный выход Windows 7 не за горами, поэтому изучение новых возможностей операционной системы для программистов на C# становится актуальной. Новые веяния и правила для программистов появились уже при выходе Windows Vista с появлением UAC. Но Vista не получила широкого распространения у пользователей, поэтому программисты не очень активно изучали новое. С выходом Windows 7 ситуация может измениться в лучшую сторону. Я решил создать на своем сайте отдельный раздел, посвященный именно программированию под Window 7.
На Хабре уже был цикл примеров, посвященных программированию под Windows 7. Но эти примеры выходили в то время, когда Win7 была еще в бета-версии. Поэтому я заносил статьи в закладки, чтобы вернуться к ним позже. Мне не хотелось ставить бета-версию на рабочую машину. Но недавно я все-таки поставил себе Windows 7 и очень ею доволен.
Теперь, когда у меня уже стояла Win7, можно было приступать к изучению тех материалов, которые я занес в закладки. Но, оказалось, что примеры немного устарели. Появились новые библиотеки с другими классами и пространствами имен. Поэтому пришлось изучать новинки с нуля. Кроме того, опубликованные примеры были расчитаны на достаточно опытных программистов, поэтому были опущены некоторые мелкие детали, как нечто само собой разумеющееся.
А начнем мы с примера создания индикатора прогресса (ProgressBar) на панели задач.
Но, сначала нужно подготовиться. Скачиваем Windows API Code Pack для Microsoft .NET Framework. Это мощный пакет, призванный помочь разработчикам создавать приложения для Windows 7 (и частистно Windows Vista) с помощью .NET. Пакет представляет собой библиотеку исходных кодов, используемых для доступа к некоторым новым функциям Windows через управляемый код.
Распакуйте архив с файлами и запустите решение WindowsAPICodePack.sln. По умолчанию в качестве StartUp-проекта будет использоваться проект Shell. Нас это вполне устраивает, так как именно здесь находятся необходимые нам классы для работы с панелью задач. Выбираем в меню Build / Build Shell и получаем в папке ..\WindowsAPICodePack\Shell\bin\Debug файл Microsoft.WindowsAPICodePack.Shell.dll. Это и есть наша библиотека, которую мы будем использовать в своих проектах.
Теперь запускаем Visual Studio и создаем новый проект Windows7TaskBarProgressBarDemo. В Solution Explorer щелкаем правой кнопкой на папке References и выбираем пункт Add Reference. В диалоговом окне переключаемся на вкладку Browse и находим созданную нами библиотеку Microsoft.WindowsAPICodePack.Shell.dll. Переключаемся в режим редактирования кода и прописываем строчку
using Microsoft.WindowsAPICodePack.Taskbar;
На этом первые приготовления закончены.
Добавляем на форму таймер и кнопку, которая будет запускать таймер. Пора рассказать о цели нашего приложения. Предположим, мы поставили на плиту молоко для подогрева. Но нам не хочется стоять у плиты, а хочется почитать новую статью на Хабре. Вы убеждаете себя, что за минуту ничего страшного не произойдет и молоко не убежит. Но, читая интересную статью, время не замечаешь. Результат плачевен. Попытаемся установить контроль над временем.
Итак, устанавливем у таймера интервал, равный 1000 (1 секунда) и пишем код:
TaskbarManager instanceTaskBar = TaskbarManager.Instance;
static int counter = 0;
private void butStartTimer_Click(object sender, EventArgs e)
{
instanceTaskBar.SetOverlayIcon(null, "");
timerCook.Enabled = true;
}
private void timerCook_Tick(object sender, EventArgs e)
{
counter += 1;
instanceTaskBar.SetProgressValue(counter, 60);
if (counter >= 60)
{
timerCook.Enabled = false;
counter = 0;
instanceTaskBar.SetProgressValue(0, 60);
instanceTaskBar.SetOverlayIcon(Windows7TaskBarProgressBarDemo.Properties.Resources.Ready, "Готово");
}
}
* This source code was highlighted with Source Code Highlighter.
Теперь пояснения к коду. За раскраску кнопки приложения на панели задач в виде индикатора прогресса отвечает метод SetProgressValue. Запуская таймер, мы увеличиваем значение счетчика каждую секунду и доводим его до максимального значения (в нашем случае до 60). Когда счетчик достигнет своего потолка, нужно как-то визуально показать пользователю, что операция завершена. Для этой цели я решил воспользоваться методом SetOverlayIcon, о котором расскажу в другой раз.
Итак, как это выглядит на практике. Ты ставишь молоко на плиту, садишься за компьютер и нажимаешь кнопку, запускающую таймер. Теперь можешь переключиться на браузер и читать статью на Хабре. Краем глаза по индикатору ты всегда можешь контроллировать, сколько времени осталось для чтения.
После окончании минуты на панели задач появляется значок, сигнализирующий об окончании процесса.
Как видите, все очень просто.
В нашем примере использовался стандартный индикатор прогресса зеленого цвета (режим Normal). Существуют и другие варианты: NoProgress, Indeterminate, Error, Paused. Посмотреть, как они выглядят, можно на уже упоминавшейся странице Программируем Windows 7: Taskbar. Часть 1 - Progress Bar / Windows 7 / Хабрахабр
Приведенный пример немного надуман. В реальной жизни подобная функциональность может понадобиться для самых разнообразных задач: отображение процесса копирования, формирования данных, генерация изображений, и т.д. Некоторые приложения от сторонних производителей уже используют эту возможность, не считая родных приложений в Windows 7.
Если у кого-то возникнут трудности с примером, то чуть позже я выложу исходники на сайте в разделе Windows 7. Удачи в освоении Window 7!