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

Автор: Topol Воскресенье, Май 6th, 2012 Нет комментариев

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

Одной из важнейших функций панели задач в Windows 7  являются так называемые списки переходов или Jump Lists. Списки переходов отображаются, если выделить значок приложения в панели задач и нажать правую кнопку мыши. Если приложение использует функциональность списков переходов, то кроме стандартных действий (закрепить и закрыть) появятся еще ряд дополнительных действий, которые облегчают нашу повседневную работу.

Этой функциональностью панели задач активно пользуются различные приложения. Например, Windows Media Player отображает опции переключения плейлистов. Internet Explorer  и Windows Explorer содержат в списке переходов ссылки на места, которые вы посещали недавно. Windows Live  Messenger отображает опции переключения состояния. 

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

По сути, каждый пункт в списке переходов представляет собой ссылку на программу или файл. Так, например, мы можем запустить калькулятор или какой-либо документ заданного формата. К сожалению, у нас нет возможности напрямую перехватить событие нажатия на пункт в списке переходов. Каждый раз, когда мы выбираем очередной пункт будет запускаться новый экземпляр приложения. Это связано в первую очередь с тем, что список переходов можно вызвать даже тогда, когда приложение не запущено. В этом случае оно должно быть закреплено на панели задач. Например, на следующем рисунке видно, что Internet Explorer в данный момент не запущен, но список перехода мы открыть можем.

Итак, давайте посмотрим каким образом подобная функциональность может быть реализована в наших приложениях. Для работы со списками переходов нам понадобится объект типа JumpListManager, который входит в состав .NET Interop Sample Library. Создавать его необходимо в момент создания кнопки нашего приложения на панели задач. Для этих целей можно переопределить метод WndProc следующим образом:

Код:
protected override void WndProc(ref Message m)
{
if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
{
_jumpListManager = WindowsFormsExtensions.CreateJumpListManager(this);        _jumpListManager.UserRemovedItems += (o, e) =>
{
e.CancelCurrentOperation = false;
};
// add items
_jumpListManager.Refresh();
}
base.WndProc(ref m);
}

Обратите внимание на вызов метода Refresh после создания объекта JumpListManager. Вызов этого метода необходим для обновления позиций в списке. Также обязательным действием является подписка на событие UserRemovedItems. Оно исполняется когда производится попытка удаления устаревших пунктов из списка переходов. Давайте теперь попробуем добавить новые позиции в список. Для этих целей существуют классы-обертки и методы у объекта JumpListManager.

Самый простой тип позиций в списке переходов — задачи. Задачей может быть запуск внешнего приложения или нашего приложения с какими-то параметрами. В WLM в виде задач реализовано переключение состояния пользователя. Для создания задачи в списке переходов используется метод AddUserTask.

Код:
_jumpListManager.AddUserTask(new ShellLink
{
Path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), «calc.exe»),    Title = «Calculator»,
Category = «Applications»,
IconLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), «calc.exe»),
IconIndex = 0
});

Как видим, здесь создается новый объект типа ShellLink, в который передается путь до приложения, заголовок и значок. Я добавил в свое приложение две задачи и получил следующий результат:

Другой вариант заполнения списка переходов — ссылки на документы, которые были загружены ранее. Для этих целей я создал несколько текстовых файлов с расширением «.myapp» и ассоциировал этот тип файлов со своим приложением. При запуске приложения я проверяю передано ли имя файла в качестве параметра при запуске приложения. Если имя задано, то я считываю этот файл и добавляю его в список ранее загруженных файлов. Для этих целей существует метод AddToRecent.

Код:
if (File.Exists(Environment.GetCommandLineArgs().Skip(1).FirstOrDefault() ?? String.Empty) == true)
{
_jumpListManager.AddToRecent(Environment.GetCommandLineArgs().Skip(1).FirstOrDefault() ?? String.Empty);
}

Теперь из Windows Explorer я открою эти файлы. При этом будет запускаться мое демонстрационное приложение (если мы правильно ассоциировали данный тип файлов с приложением). При этом при вызове списка я увижу, что в категории «Recent» появились ссылки на ранее открытые файлы.

Я могу закрепить те позиции, с которыми я работаю чаще всего. В этом случае я смогу быстро открывать нужные мне документы через список переходов.

Другой способ размещения позиций в списке — создание ссылок на постоянные документы/программы. В этом случае мы также можем сгруппировать эти позиции по категориям. Для этих целей существует метод AddCustomDestination.

Код:
_jumpListManager.AddCustomDestination(new ShellLink
{
Path = @»about.txt»,
Title = «About»,
Category = «My application»,
IconLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), «shell32.dll»),
IconIndex = 11
});

Я добавил несколько таких ссылок в список переходов и получил следующий результат.

На этом рисунке видно, что появились две дополнительные группы со ссылками внутри.

Замечательной особенностью списков переходов является то, что его содержимое также доступно в меню Start. Так, например, если мы активно пользуемся этой функциональностью, то это можно использоваться и из меню Start:

Таким образом мы можем использовать дополнительную функциональность, которую нам предоставляет панель задач Windows 7 для обеспечения максимально комфортной работы пользователя.

Загрузить демо-приложение >>>

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

Успехов вам в построении ваших приложений для Windows7!

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

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

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

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