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

Напечатать страницу
02.07.2009 14:55 | deeper2k

Одной из важнейших функций панели задач в 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!

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

Комментарии

Не в сети

Спасибо!

03.07.09 17:55
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.043 секунд (Общее время SQL: 0.012 секунд - SQL запросов: 34 - Среднее время SQL: 0.00036 секунд))