четверг, 26 января 2012 г.

Юзабилити. Про трей

Эх, давненько я не брал в руки шашки… Но лучше поздно, чем в штаны!

Напишу-ка я про не очень-то очевидную фичу в работе с треем. Для закваски пронзительная история, она же быль. Повадился у меня последнее время падать Проводник Windows. Падает как заведенный, впрочем при определенных обстоятельствах, но ни о них речь. Проводник после креша  сам перезапускается, но по ходу его перезапуска некоторые софтины в трее не восстанавливаются. Если с каким-нить TypeAndRun это пофиг — убил, и запустил заново, то софт с пользовательскими данными убивать через менеджер процессов уже не хочется. "Че-то я ачкую…" ©. Скажем, к примеру, рухнувшая база данных какого-нибудь The Bat может весьма и весьма попортить крови.

Способов решения проблем с упавшим Проводником, и как следствие, пересоздающейся на лету панели задач есть. Как вариант, ловить сообщение TaskBarCreated и восстанавливаться в трее, есть и другие.
Но есть способ элегантнее, надежнее, а главное комфортнее для пользователя. Приложение, свернутое в трей показывается в списке окон по Alt+Tab.

Это решение зарекомендовало себя просто великолепно.

  • Даже после пересозданной панели задач приложение в любом случае показывается в Alt+Tab списке.
  • В штатном режиме – безо всяких падений Проводника – пользователь в любой момент имеет возможность поднять приложение из трея клавиатурой, а не только мышкой. Выбираем окно из списка  Alt+Tab – приложение поднимается из трея. Для законченных гиков, которые при работе касаются мыша разве что чашкой кофе, это весьма и весьма немаловажный нюанс.

Как показал опыт, для приложений оперирующих пользовательскими данными, возможность подняться из трея с помощью клавиатуры почти обязательна для реализации. Сделал такое в Aml Pages. И ох сколько раз оно меня выручало. Нет слов! Про удобство молчу — у меня самого мышь все больше "для комплекту".

PS: кода вставки в список Alt+tab пока не дам. Потому как  жмот я. Потому как, пока доводил до ума добавление окон в список Alt+Tab, такой херни наворотил, что сам уже с превеликой тоской зрю в свой код. Ревьюить его, ревьюить и еще раз ревьюить.

Если в двух словах. Для окон верхнего уровня задача решается элементарно: нужно при прятке окна создать для него дочернее WS_OVERLAPPED-окошко, и задвинуть его за края экрана. А по активизации последнего из Alt+Tab-списка уже поднять из трея основное скрытое окно.

Но заморочки начинаются, когда необходимо добавить в Alt+Tab тул-окно (окно со стилем WS_EX_TOOLWINDOW).Вот пока реализовывал эту возможность и наворотил говно-коду. Теперь сначала причесать код нужно, а уж только потом "в народ". Так что сорсы как-нибудь позже. А уж если кому невмоготу да срочно — стучите в комменты.