У Windows 7 з`явилося дуже багато нововведень для розробників. До них відносяться більш досконала підсистема візуалізації, нові API датчиків і визначення місцезнаходження, бібліотеки файлів, федеративний пошук і, звичайно ж, поліпшена панель задач. Ця стаття присвячена списками переходів - вони замінюють контекстні меню в області сповіщень.
Для початку завантажте 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, або безпосередньо включити необхідні проекти в своє рішення:
Для зручності можна додати простір імен до блоку 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;
Тепер ви можете додати одну або більше власних категорій елементів. Це можуть бути або папки, або файли. Тут діють два дуже важливих правила.
- Файли / папки повинні існувати! При необхідності перевірте шлях перед додаванням JumpListItem; якщо його немає, відбудеться збій.
- Додаються файли повинні ставитися до типу, зареєстрованому для вашого Програми- в іншому випадку відбудеться збій або навіть гірше: виключення буде згенеровано не в тому рядку, де ви додаєте такі файли, а після закінчення настройки і спробі оновлення списку.
В даному випадку я закоментувавши останній елемент, але ви могли б використовувати JumpListItem для реальних файлів в файлову систему і об`єкти JumpListLink для посилань, що не відносяться до файлової системи. І знову не додавайте JumpListItem, якщо не впевнені в його наявності і в тому, що він зареєстрований.
Visual Basic
`Додаю свої посилання (іменники)
Dim catActions As New JumpListCustomCategory ( "Destinations")
catActions.AddJumpListItems (
New JumpListLink (Environment.GetFolderPath (Environment.SpecialFolder.MyPictures), "My Pictures"), _
New JumpListLink ( "https://blogs.msdn.com/coding4fun", "Visit Coding4Fun"), _
New JumpListLink ( "https://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 ( "https://blogs.msdn.com/coding4fun", "Visit Coding4Fun"),
new JumpListLink ( "https://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"
});