25 янв. 2011 г.

WinScreener

Давно вынашивал идею, которую наконец реализовал. Идея состоит в том, чтобы в отдельном окошке, которое лежит поверх остальных окон, просматривать часть другого окна, даже если оно скрыто другими окнами. Идея родилась при использовании одного монитора, когда в Visual Studio (или других бильдерах) идет долгий билд, есть время заняться другими делами. Выкидывать на самый верх цельное окно студии смысла нет, т.к. оно закроет значительную часть экрана. А вывести на верхний уровень кусочек окна - очень даже удобно. Фактически, это та же экранная лупа, только отображающая определенное окна, а не весь экран.
Результатом раздумий и кодирования стал WinScreener. Программа делает именно это - выводит на экран кусочек указанного окна.
Из дополнительных бонусов получилась фишка отображения последнего активного "родственного" указанному окна. Родственность определяется по одинаковому заголовку окна или имени класса окна. Например все консольные окна в Windows имеют именем класса строку "ConsoleWindowClass". Если есть несколько консольных окошек, которые нужно попеременно мониторить, можно в WinScreener выделить опцию Find: "First - same class". Последнее активное консольное окно будет мониториться WinScreener-ом.

Интерфейс программы не сложный. Пиктограммкой "Мишень" выбирается нужное окно. Кнопкой Start/Stop активируется процесс мониторинга. По причине того, что интересующее окно может находиться в центре родительского, я сделал так, чтобы выводилось именно выделенное окно, даже если оно является дочерним контролом диалога. Если нужно мониторить всё окно, мишень можно навести на заголовок главного окна.

Одно из текущих ограничений - привязка к нижнему левому углу целевого окна. Планирую изменить это введением полос прокрутки, которыми можно будет выбрать интересующую часть окна.

В программе есть что доделывать. И по интерфейсу, и по функциям. Замечания и предложения принимаются.

Текущая версия - 1.0.0.0 b.

1 комментарий: