Админ

пятница, 11 июля 2014 г.

Меню быстрого запуска для Windows, или Как вернуть «Недавние документы» в Windows 8

|
В отличие от многих других пользователей Windows «со стажем», меня не смутил новый интерфейс Windows 8, и я не очень понимаю тех, кто страдает от отсутствия меню «Пуск». Но есть всё же один момент, который несколько раздражает, — отсутствие привычного подменю «Недавние документы». Это обстоятельство показалось интересным поводом для написания собственной программы отображения такого меню. Впрочем, возможности программы получились несколько шире.

Ссылка для скачивания


Предыстория

Небольшое исследование показало, что приложения (в том числе системные вроде Блокнота) по-прежнему аккуратно собирают ссылки на последние открытые документы, но по какой-то причине список этих файлов нигде в интерфейсе ОС не отображается. Существуют разные «костыли», чтобы вытащить список недавних документов (самый простой из которых: нажать сочетание клавиш Win+R и набрать в командной строке recent), но они не очень удобны.

Источником вдохновения для написания собственной программы послужила реализация стекового отображения папок в MacOS X, но с поправкой на привычные особенности интерфейса Windows и с добавлением возможности быстрого поиска.

Описание программы


Программа умеет выводить на экран список всех файлов-ссылок (то есть файлов с расширением lnk) из указанной ей папки. По умолчанию (если не задано иное) выводится системная папка «Недавние документы».

Кроме того, программа умеет имитировать меню Quick Launch из прежних версий Windows, то есть её можно использовать для организации быстрого доступа к каким-нибудь другим программам или документам (достаточно сделать папку, разместить в ней ярлыки к нужным файлам и указать путь к этой папке в настройках).

Для работы программы нужна ОС Windows версии Vista или более современная (теоретически в XP тоже, но в XP могут не работать какие-нибудь функции — я сейчас не имею возможность проверить).

Рекомендуется закрепить программу в виде кнопки на панели задач (Windows 7/8) или сделать ссылку в панели быстрого запуска (Windows XP), потому что программа показывает меню с содержимым выбранной папки рядом с панелью задач и выглядит оно похоже на всплывающие меню кнопок приложений Windows 7 (так задумано специально).

Собственно, это всё, что нужно знать, если вы планируете только иметь доступ к недавним документам в Windows 8 или более современных ОС. Дальше пойдут разные технические детали.

Настройка программы

Можно сделать несколько ярлыков к одной программе с разными папками. Ярлыки в списке могут быть упорядочены по дате (актуально для недавних документов) или по имени.

Настраивается программа очень просто. Нужно создать файл с именем PopupFolder.ini и положить его в одну папку с программой. Этот файл содержит пути ко всем папкам, которые вы хотите видеть, и некоторые другие их свойства. Каждой папке соответствует секция в файле:

[default]
showDate=1
caption="Недавние документы"

[qlaunch]
folder=C:\QLaunch
showDate=0
caption="Мои любимые программы"
sort=name


Имя секции не играет роли, и с именем папки никак не связано. Для открытия той или иной папки нужно указать имя соответствующей секции в ярлыке к программе, например:

PopupFolder.exe qlaunch

Если никакое имя не указано, то открывается секция default. Если секция не найдена или файл настроек вообще не существует, то по умолчанию открывается «Недавние документы».

В секциях ini-файла допускаются следующие параметры (все они необязательные):

  • folder (строка) — полный путь к папке,
  • showDate (0/1) — показывать (1) или не показывать (0) столбец с датой изменения файла,
  • caption (строка) — заголовок, который отображается в верхней части меню,
  • sort (date_up, date_down или name) — тип сортировки: по убыванию даты (date_down, по умолчанию), по возрастанию (date_up) или по имени (name).

Технические замечания (для программистов)

Самым сложным оказалось, как ни странно, вычислить координаты для демонстрации окна. Мне хотелось, чтобы окно программы было похоже на всплывающее меню Windows и появлялось рядом с кнопкой на панели задач, но в Windows не обнаружилось никаких функций, которые позволили бы узнать координаты этой кнопки. Единственное решение, которое удалось найти в Интернете, сводилось к загрузке изображения панели задач в виде битовой матрицы и последующему анализу изображения, что представляется чересчур ненадёжным методом (в Windows, как известно, пользователь может менять визуальное оформление при помощи тем).

Поэтому пришлось пойти на компромисс: та координата, которая задаёт отступ от панели задач (при горизонтальной ориентации панели это позиция нижнего или верхнего края окна, а при вертикальной — правого или левого) вычисляется «честно», а в качестве второй координаты используется текущая позиция указателя мыши. Если пользователь вызывает программу щелчком на кнопке, закреплённой на панели задач и не успевает увести указатель далеко от этой кнопки, тогда этот подход работает.

Второй неприятный пункт подстерегал меня, когда я захотел добавить всплывающее меню, демонстрирующее свойства выбранного в списке файла. Проблема оказалась в том, что системный диалог «Свойства файла» автоматически уничтожается при закрытии программы, а моя программа автоматически закрывается при потере фокуса главным окном. Либо нужно было отказаться от поведения окна программы «как меню», то есть не закрывать его при потере фокуса, либо делать программу резидентной, а мне этого пока не хотелось. Выход из ситуации найти не удалось, и я ограничился тем, что добавил в меню пункт, открывающий в Проводнике Windows папку с выбранным ярлыком, где пользователь может уже самостоятельно вызывать свойства и делать всё, что пожелает.

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

Комментариев нет:

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

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

К началу