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

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

25.01.2010 21:19,
Страницы: Пред. 1 2

Запуск операций

Windows Live Messenger использует операции списка переходов для настройки своего состояния, а Windows Media Player — для пропуска треков или остановки воспроизведения. Аналогичным образом вы можете добавлять задачи, которые запускают операции в вашем приложении. Если приложение еще не запущено (помните, что при этом список переходов все равно доступен), это приведет к его запуску с соответствующим аргументом. Это не проблема. А вот как быть, если приложение уже выполняется?

Ключ к решению в том, чтобы найти способ передачи сообщений между выполняемыми экземплярами. При запуске приложения проверяйте, не выполняется ли уже другой его экземпляр, и используйте для этого Mutex (см. Program.cs). Если других экземпляров нет, просто используйте аргументы традиционным способом. А если есть, передайте информацию о параметре другому экземпляру и завершите приложение. С этой целью вы могли бы использовать временные файлы, общие разделы реестра или проецируемые в память файлы (memory-mapped files). На мой взгляд, проще всего использовать оконные сообщения.

Код для создания сообщений с собственными идентификаторами, поиска нужного окна и отправки сообщения вы найдете в моем классе WindowsMessageHelper.

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

Если приложение уже выполняется, отправляйте сообщение асинхронно (post a message). Если нет, запускайте программу как обычно и проверяйте ее очередь сообщений. Обнаружив соответствующее сообщение, выполняйте нужную операцию (в данном случае просто показывайте сообщение и меняйте цвет метки).

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

Если вы не против применения пространства имен Microsoft.VisualBasic.ApplicationServices из кода на C#, то можете задействовать преимущества режима работы приложения SingleInstance из VB. Это избавит вас от явного использования мьютекса, механизма взаимодействия (interop) или передачи сообщений.

Регистрация типа файлов

Помните: пока ваша программа не зарегистрирована как обработчик файлов данного типа, вы не можете показывать последние или часто используемые файлы или указывать на индивидуальные файлы. Для регистрации программы в качестве обработчика файлов создайте запись в раздел реестра HKEY_CLASSES.

Проблема в том, что без должных разрешений записывать что-либо в ветвь реестра HKEY_CLASSES нельзя. По умолчанию нужное разрешение выдается только группе Administrators (Администраторы). Вряд ли вы захотите, чтобы ваше приложение работало с полномочиями администратора, — это был бы возврат к стилю Windows XP!

Здесь два варианта: вы могли бы создать второе приложение, которое могло бы запускаться с повышенными полномочиями для выполнения регистрации. Именно так сделано в примерах, поставляемых с Windows API Code Pack. Способ получше заключается в том, что вы создаете собственный установщик для проекта и выполняете необходимые сопоставления типов файлов в процессе его работы. Установщик всегда требует прав администратора, но запускается лишь однажды.

Создание установщика

Чтобы создать установщик, сначала добавьте его проект в свое решение как обычно. Затем из списка Project types выберите Other Project Types | Setup and Deployment. В списке Templates щелкните Setup Project. Присвойте ему имя и добавьте в решение.

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

В Solution Explorer щелкните проект установщика правой кнопкой мыши и выберите из контекстного меню команду View | File Types.

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

В списке File Types щелкните правой кнопкой мыши File Types on Target Machine, а затем выберите Add File Type. Заполните свойства, чтобы присвоить имя типу файлов и указать расширение. В свойстве Command выберите значение «Primary output from имя_основного_проекта».

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

На вкладке File Types ваш тип файлов должен появиться в следующем виде:

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

Теперь у вас есть зарегистрированный тип файлов. Вам все равно надо модифицировать проект установщика, чтобы копировать основной вывод (устанавливаемый EXE-файл) в папку Program Files, и настроить любые другие свойства в проекте установщика, но эти операции зависят от конкретного типа файлов. Если вы в чем-то не уверены, взгляните на образец кода, чтобы увидеть, как настраивается проект установщика.

Заключение

Windows API Code Pack значительно упрощает настройку панели задач и добавление списков переходов, а также расширяет возможности интеграции ваших программ в систему. Загрузите Visual Studio Express, скачайте Windows API Code Pack и приступайте к его изучению.

Новые средства не будут работать на компьютерах под управлением более ранних версий Windows (до Windows 7), поэтому обязательно проверяйте версию операционной системы.

Страницы: Пред. 1 2
Оцените материал:  
(Голосов: 3, Рейтинг: 3.02)

Каждый вечер мы будем присылать вам одно письмо со всеми опубликованными за день материалами. Нет материалов - нет писем, просто и удобно (другие варианты).

Материалы по теме


Комментарии (0)