Win7 Jump List

Наверно про новые фишки Win7 не писал только ленивый, и в интернете куча обзоров того, как это применить. Я заметил, что читать технические статьи, где просто рассказывается о том как применить, то или иное средство не очень интересно. Гораздо интереснее когда технология применяется на конкретном полезном примере, в результате чего получается небольшая полезная программа. Конечно, такое получается не всегда, но в последнее время я все больше и больше стараюсь так делать.

Итак, будем решать следующую проблему: У меня дочерта иконок прикреплено в таскбаре. 2 студии, SQL сервер, Expression  studio, офисные приложения, браузеры – все это было бы полезно сгруппировать и чтобы по умолчанию запускались основные приложения.

Основной функционал

Для того, чтобы начать работать с быстрым списком действий (jump list) необходимо скачать Windows API Code Pack. После это создаем любой проект, который сможет в итоге создать окно для пользователя, не обязательно его показывать.

Я решил тренироваться на WPF. Итак, у нас есть проект, который создает окно. В результате, опытным путем было установлено, что код создания «быстросписка» может быть помещен только после того, как полностью проинициализируется хотя бы одно окно приложения (как правило основное). Т.е. на мой взгляд, для создания подойдет реакция на окончание загрузки окна.

Список действий(программ) будет создаваться на основе некоторых данных введеных пользователем. Необходимо знать:

  • Путь до программы
  • Имя  для отображения
  • Будет ли она действием по умолчанию

Для этих данных я создал небольшой класс

Я не стал заморачиваться на проверках и прочем, т.к. это пример, и помним о том, что только 20% времени уходит на написание функционала, остальное на перделки и свистелки в разных ипостасях. Не хотелось тратить времени больше чем нужно, все остальное можно допилить самостоятельно.

Допустим у нас есть уже список элементов LinkInfo, и мы строим собственно «быстросписок». Сначала добавляем ссылки на пространства имен Microsoft.WindowsAPICodePack.Shell и Microsoft.WindowsAPICodePack.Taskbar, после этого уже можно писать реальный код.

Начнем с создания самого Jump List и категории.

Все просто и логично, вот что я люблю! =) Создание элементов списка тоже не будет rocket science.

Если у приложения есть несколько иконок, то можно указать это через номер индетификатора ресурса при создании IconReference.

Отделить одну категорию от другой можно с помощью следующего кода:

Можно создавать ссылки как на сайты, так и на папки. Путь задается строкой, а сама система вычислит, что же имелось в виду.

В целом поведение на нажатие ссылки может быть описано примерно так: «Запустись то, куда я показываю, а как – само разберись!»

Дополнительный функционал

Не будем подробно останавливаться на том, как сохранять и загружать настройки и все в таком духе. Поговорим лучше о небольших нюансах самой работы приложения.

После того как мы назначили приложение по умолчанию, вызов нашей программы должен запустить необходимую программу и на этом завершить свою активность (закрыться). И в то же время надо уметь донастроить программу после назначения дефолтных программ. Да, нам помогут аргументы запуска.

Надо сделать пункт в «быстросписке» по запуску программы в режиме настройки. Пусть у нас для этого будет параметр «-s». Тогда внесение в jump list будет таким

Как видим, ничто нас не ограничивает в постороении элементов списка. Можно передавать к приложениям аргументы, рабочие директории, а так же в каком виде показать окно – минимизированом, максимизированном, как есть (и т.д.)

Про то, как работать с аргументами и свойствами приложения было рассказано ранее, так что не буду останавливаться на этом.

Заключение

Это может быть отправной точкой развития программы. Можно реализовать еще кучу вещей и конечно поработать над оптимизацией кода. Не делайте обновление прибиндженых данных как сделано в этой программе, используйте MVVMLight! =)  В следующей статье продожим работу над этой программой, в применении с новыми фичами Win 7.

Исходный код.

Hard’n’heavy!

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