Запуск операций
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. Присвойте ему имя и добавьте в решение.
В Solution Explorer щелкните проект установщика правой кнопкой мыши и выберите из контекстного меню команду View | File Types.
В списке File Types щелкните правой кнопкой мыши File Types on Target Machine, а затем выберите Add File Type. Заполните свойства, чтобы присвоить имя типу файлов и указать расширение. В свойстве Command выберите значение «Primary output from имя_основного_проекта».
На вкладке File Types ваш тип файлов должен появиться в следующем виде:
Теперь у вас есть зарегистрированный тип файлов. Вам все равно надо модифицировать проект установщика, чтобы копировать основной вывод (устанавливаемый EXE-файл) в папку Program Files, и настроить любые другие свойства в проекте установщика, но эти операции зависят от конкретного типа файлов. Если вы в чем-то не уверены, взгляните на образец кода, чтобы увидеть, как настраивается проект установщика.
Заключение
Windows API Code Pack значительно упрощает настройку панели задач и добавление списков переходов, а также расширяет возможности интеграции ваших программ в систему. Загрузите Visual Studio Express, скачайте Windows API Code Pack и приступайте к его изучению.
Новые средства не будут работать на компьютерах под управлением более ранних версий Windows (до Windows 7), поэтому обязательно проверяйте версию операционной системы.
Комментарии (0)