Списки переходов Windows 7

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

Страницы:12След.

Для начала загрузите Visual Studio 2008 Express Edition или более полную версию (C# или VB). Либо просто возьмите Visual Studio 2010 Beta 2 - она уже доступна и стоит того, чтобы ее загрузить. Все Express-издания бесплатны, и любая из версий (2008 или 2010) будет прекрасно работать с кодом, сопутствующим этой статье.

Что такое список переходов?

Списки переходов — новая концепция в Windows 7, позволяющая разработчику создавать ярлыки (shortcuts) для пользователей прямо в контекстном меню значка своей программы на панели задач или в меню Пуск (Start).  Эти ярлыки могут быть простыми ссылками на папку документов или библиотеку данного приложения, либо ссылками на командную строку запуска того же приложения с передачей какого-либо параметра для выполнения какой-то специфической задачи.

Вы можете использовать этот способ в Live Messenger для изменения онлайнового состояния, вывода нового окна сообщения или для открытия веб-страниц, относящихся к приложению. В общем, все это ярлыки — к URL или тому же исполняемому файлу с аргументом, вызывающим некое изменение.

Windows API Code Pack

Windows API Code Pack дает возможность задействовать преимущества специфических средств Windows Vista и Windows 7, недоступных через универсальную инфраструктуру, а также неуправляемых функций, которые не имеют смысла в общеязыковой исполняющей среде (CLR), используемой во всех поддерживаемых конфигурациях. Большая часть таких средств состоит из interop-оболочек (позволяющих взаимодействовать с неуправляемыми функциями из управляемого кода).

С помощью Code Pack вы получаете доступ к новой панели задач, Direct2D, DirectWrite, свойствам оболочки, спискам переходов и др. В комплект также включены многочисленные проекты с примерами кода, которые послужат вам отправной точкой, так что избегать новых возможностей нет никаких причин!

Добавление списка переходов

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

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

Вот как все это делается.

Сначала добавьте две обязательные ссылки из Windows API Code Pack. Вы можете либо скомпилировать проект и ссылаться на DLL, либо напрямую включить необходимые проекты в свое решение:

Списки переходов Windows 7

Для удобства можно добавить пространство имен к блоку using, чтобы потом набирать более короткий текст:

Visual Basic

Imports Microsoft.WindowsAPICodePack.Taskbar

Imports Microsoft.WindowsAPICodePack.Shell

Visual C#

using Microsoft.WindowsAPICodePack.Taskbar-

using Microsoft.WindowsAPICodePack.Shell-

Класс Microsoft.WindowsAPICodePack.Taskbar.JumpList — то место, где разворачивается большая часть действа. Для создания списка предназначен статический метод-фабрика CreateJumpList. Всегда начинайте с вызова этого метода, даже если приложение ранее создавало список переходов.

Visual Basic

Private Sub CreateJumpList()

Dim jl As JumpList = JumpList.CreateJumpList()

Visual C#

private void CreateJumpList()

{

JumpList jl = JumpList.CreateJumpList()-

Далее у вас есть выбор из нескольких вариантов — в зависимости от того, что именно вы хотите увидеть в списке. Базовой группой является список файлов. Вы можете выбрать отображение Recent files (последние файлы), Frequent files (часто используемые файлы) или ни один из них, но не оба варианта одновременно. Если вы ничего не выбираете на этом этапе, то автоматически получите вариант Recent files — при условии, что у вас есть зарегистрированный тип файлов.

Visual Basic

' Показываем пользовательские файлы: Recent, Frequent или None

jl.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent

Visual C#

// Показываем пользовательские файлы: Recent, Frequent или None
jl.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent-

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

  1. Файлы/папки должны существовать! При необходимости проверьте путь перед добавлением JumpListItem- если его нет, произойдет сбой.
  2. Добавляемые файлы должны относиться к типу, зарегистрированному для вашего приложения- в ином случае произойдет сбой или даже хуже: исключение будет сгенерировано не в той строке, где вы добавляете такие файлы, а по окончании настройки и попытке обновления списка.

В данном случае я закомментировал последний элемент, но вы могли бы использовать JumpListItem для реальных файлов в файловой системе и объекты JumpListLink для ссылок, не относящихся к файловой системе. И вновь не добавляйте JumpListItem, если не уверены в его наличии и в том, что он зарегистрирован.

Visual Basic

' Добавляю свои ссылки (существительные)

Dim catActions As New JumpListCustomCategory("Destinations")

catActions.AddJumpListItems(

New JumpListLink(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "My Pictures"), _

New JumpListLink("http://blogs.msdn.com/coding4fun", "Visit Coding4Fun"), _

New JumpListLink("http://code.msdn.microsoft.com/WindowsAPICodePack", "Windows API Code Pack"))

'new JumpListItem(@"c:\Test1.c4f")

jl.AddCustomCategories(catActions)

Visual C#

// Добавляю свои ссылки (существительные)

JumpListCustomCategory catActions = new JumpListCustomCategory("Destinations")-

catActions.AddJumpListItems(

new JumpListLink(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "My Pictures"),

new JumpListLink("http://blogs.msdn.com/coding4fun", "Visit Coding4Fun"),

new JumpListLink("http://code.msdn.microsoft.com/WindowsAPICodePack", "Windows API Code Pack")

//new JumpListItem(@"c:\Test1.c4f")

)-

jl.AddCustomCategories( catActions)-

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

Visual Basic

' Добавляем задачи наших пользователей (глаголы)

jl.AddUserTasks(New JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "Open Notepad") _

With {.IconReference = New IconReference(Path.Combine(systemFolder, "notepad.exe"), 0)})

Visual C#

' Добавляем задачи наших пользователей (глаголы)

jl.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "Open Notepad")

{

IconReference = new IconReference(Path.Combine(systemFolder, "notepad.exe"), 0)

})-

Свойство IconReference указывает на значок, ссылаясь на DLL- или EXE-файл и задавая индекс в этом файле. Если вы хотите получить значок по умолчанию для исполняемого файла, с которым вы осуществляете связывание, указывайте EXE-файл с нулевым индексом.

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

Visual Basic

jl.AddUserTasks(New JumpListSeparator())

Visual C#

jl.AddUserTasks(new JumpListSeparator())-

Последние ссылки в списке переходов указывают на наш же исполняемый файл. Это наиболее распространенный вариант использования списков перехода. Простой список с последними или часто используемыми файлами, конечно же, — штука хорошая, но возможность инициировать некие операции в самой программе, даже если она не запущена, по-настоящему удобна. Это почти что меню параметров командной строки запуска приложения!

Команды в списке, запускающие операции в самом приложении, требуют вызова этого приложения с разными аргументами. Помните, что это не настоящее меню — вы не получите событие Click. Вместо этого нужно обрабатывать аргумент, переданный вашей программе, даже если она уже выполняется.

Первый аргумент в командной строке всегда является полным именем исполняемого файла (вместе с путем). Свойство Arguments позволяет указывать аргументы командной строки, напрямую не видимые пользователям. В этом примере я определил три аргумента-заглушки. Если один из них передается, приложение меняет фон метки и сообщает, какой аргумент был передан.

Visual Basic

jl.AddUserTasks(New JumpListLink(Assembly.GetEntryAssembly().Location, "Action 1 (Green)") _

With {.Arguments = "-1", .IconReference = New IconReference(Assembly.GetEntryAssembly().Location, 0)})

Visual C#

jl.AddUserTasks(new JumpListLink(Assembly.GetEntryAssembly().Location, "Action 1 (Green)")

{

IconReference = new IconReference(Assembly.GetEntryAssembly().Location, 0),

Arguments = "-1"

})-

 

Списки переходов Windows 7