понедельник, 16 июня 2008 г.

GUI Шпионы (информация к размышлению)

В этой статье я попытался сделать краткий обзор инструментов, которые помогают исследовать пользовательский интерфейс Windows-приложений, и с которыми мне в той или иной мере доводилось работать самому. Для иллюстрации работы инструментов я буду использовать простую форму с кнопкой и пустым (и по этому невидимым в рантайме) PictureBox. Вот как эта форма выглядит в дизайн-тайме (первый) и в рантайме (второй).


Итак, встречайте: Spy ++, The Customiser, Managed Spy и WfSpy. Первые два инструмента рассчитаны на работу с native Win32 приложениями, так как были созданы до появления технологии .NET, однако работу свою выполняют хорошо и с managed-приложениями. Естественно, всех свойств и событий для .NET контролов они не покажут, но наиболее важные, такие как: координаты, размеры, текст, доступность (enable/disable) - будут.

Spy ++ (Microsoft, Win32)
Пожалуй, самый известный в своем роде. Этим инструментом я пользуюсь постоянно и по сей день, поскольку это самый надежный инструмент из перечисленных. Не так давно у него появился младший брат Remote Spy – ориентированный на работу с приложениями, написанными для мобильных устройств.Но это уже совсем другая история. Spy++ уже много лет входит в состав Visual Studio. Однако через меню кнопки Пуск (Start) вы его, скорее всего, не найдете и поэтому рекомендую самостоятельно поискать в каталоге установки студии через обычный файловый поиск spyxx.exe. У меня он находится здесь VSDir\Common7\Tools (VSDir – каталог, где установлена студия). На рисунке ниже представлено главное окно Spy++, как оно выглядит сразу же после старта.
Инструмент умеет показывать информацию о запущенных процессах, созданных окнах, потоках. Но работает только в режиме readonly – показывает различные свойства перечисленных объектов системы, но менять не дает, в отличие от The Customiser или Managed Spy. Позволяет так же отслеживать события, которые приходят к интересующему окну. Чтобы начать исследовать какую-нибудь сложную форму или контрол, вызовите команду Find Window из меню Spy.

В появившемся диалоге наведите курсор на иконку окна с прицелом и перетащите ее на интересующее окно или контрол.
Затем нажмите OK. В результате появится диалог со свойствами выбранного объекта. Пример такого окна ниже.
С этого диалога на закладке Windows можно быстро перейти к родительскому окну, на закладке Process можно быстро перейти к родительскому процессу или потоку исследуемого окна. Если нажать кнопку Synchronize, выбранный объект будет найден в дереве окон, которое отображается в центральной части главного окна.
Закроем окно свойств и перейдем к дереву окон. В контекстном меню узла дерева есть несколько команд, но расскажу только о Highlight. Эта команда позволяет подсветить мерцающей рамкой контрол или окно, соответствующее узлу дерева. Разумеется, чтобы ее увидеть, надо чтобы окно, в котором находится выбранный контрол, находилось в области видимости.
Ну, вот вкратце и все. У инструмента еще много возможностей и кого он заинтересует, найдет их самостоятельно. Дополнительное описание Spy++ можно найти на его страничке в MSDN.

The Customiser (Wanga International, Win32)
Это первый инструмент такого рода, с которым я познакомился. Настоящая игрушка для программистов (и не только). В изучении пользовательского интерфейса приложений намного удобней и интуитивней Spy++ или Managed Spy. Скачать его можно здесь. Позволяет во время работы приложения менять свойства его контролов – размеры, положение, надписи, видимость, доступность (enable/disable) и еще много чего. Посылать различные сообщения контролам и окнам. Например, любую кнопку, которая находится в состоянии disable можно сделать enable, потом нажать и посмотреть что произойдет :). Вообще The Customiser умеет много чего, всего и не перечесть. Весьма прикольно при помощи The Customiser модифицировать панель задач и кнопу Пуск/Start. На рисунке ниже показан результат работы над кнопкой Start и панелью задач.
После запуска The Customiser появится небольшое окошко с бегающим вправо-влево шариком. Кстати, после инсталляции The Customiser надо искать в корне меню All Programs, никаких папок с именем компании или приложения он не создает.
Нажмите кнопку Edit Window и появится основное окно для работы. Далее, надо нажать на кнопку On (после чего курсор поменяет свой вид на большой и желтый) и затем можно выбрать интересующее окно или контол.
После выбора компонента для исследования в диалоге появятся дополнительные закладки, на которых сгруппированы информация и действия по изменению компонента.
Коротко опишу назначение каждой закладки.
  • Size and Position – просмотр и изменение положения и размеров компонента.
  • Text – позволяет изменять текст компонента, например, заголовок окна или надпись на кнопке.
  • Misc. – закладка предназначена для изменения таких свойств компонента как enable, visibility. Также содержатся команды для посылки событий типа maximize, minimize.
  • API Message – закладка предназначена для послылки компоненту всевозможных событий.
Несмотря на богатые возможности и простоту работы с инструментом иногда отказывается работать и повисает. Порой еще и винду вешает.

Managed Spy (Microsoft, .NET 2.0)
Это бесплатный инструмент, написанный Benjamin Wulfe, участвовавшим в разработке Visual Studio, дизайнера Windows Forms, и ряда классов для Framework и Compact Framework. Скачать ManagedSpy можно здесь. Сразу после старта в левой части окна отображаются процессы с managed кодом, а справа – свойства выбранного процесса или его дочернего элемента.
В панели свойств отображаются свойства выбранного контрола, где их можно не только просматривать, но и менять (в отличие от Spy++). На рисунке ниже показан результат изменения свойства BackColor для невидного в рантайме PictureBox.
Есть функция, позволяющая на исследуемом окне подсветить исследуемый контрол (аналогично команде Highlight из Spy++). Для этого в меню View вызовите команду Show Window. В общем-то, простой и удобный использовании инструмент, но, к сожалению, не на всех окнах ManagedSpy работает. На простых все ОК, а вот на сложных иногда дает сбои. По крайней мере, у себя в проекте я им воспользоваться не смог. Более подробное описание ManagedSpy можно найти в статье в MSDN Magazine.

WfSpy (.NET 1.0, .NET 1.1)
Инструмент написан Rama Krishna Vavilala. Распространяется бесплатно и исходниками, которые прилагаются к его статье на CodeProject. Статья доступна вот здесь. К ней прилагается вариант, скомпилированный для .net 1.0. но для работы под .net 1.1 достаточно его просто перекомпилировать в VS 2003. В целом по внешнему виду очень похож на ManagedSpy. Сразу после старта в центральной части окна отображаются процессы с managed кодом. Чтобы посмотреть свойства заинтересовавшего компонента надо нажать кнопку Details. После чего откроется окно со списком свойств выбранного компонента, где можно как просматривать, так и изменять свойства компонента.
Заключение
Как видно из этого небольшого обзора, большинство инструментов достаточно просты и работа с ними интуитивно понятна. Самый сложный в использовании – это Spy++, однако, он, пожалуй, и самый функциональный. В статье приведены четыре инструмента, с другими мне сталкиваться не приходилось, так что если вы знакомы с каким-либо еще подобным инструментом - пожалуйста, напишите об этом в комментариях.

7 комментариев:

Анонимный комментирует...

Есть еще вот такая вот штука
http://www.acorns.com.au/Projects/Hawkeye/

Довольно удобная надо сказать.

Анонимный комментирует...

Привет Андрей!

TestComplete имеет очень подробное дерево с процессами окнами и прочими внутренними параметрами. Кажется позволяет "дергать" методы и свойства. Возможно он занял приличное место на пъедестале.

Простой деревенский программист.

Андрей Бороздин комментирует...

C TestComplete знаком, но как-то я про него забыл ( все-таки это инструмент для функционального тестирования :)).

lukman комментирует...

добрый день, понравился customiser удобная штука но как вы и подметили не везде работает.например на 64 разрядной w7 не тянет, подскажите пожалуйста чем можно воспользоваться на данной версии ОС. может можно что-нибудь сделать, чтоб тут заработал customiser..
еще есть хорошая программка enable buttom, которая при запуске автоматически делает кнопки открытых окон доступными для нажатия.

Андрей Бороздин комментирует...

Увы, но ничего не подскажу.

Анонимный комментирует...

В хр не могу найти The Customizer.Можно подробнее узнать как это сделать.

Анонимный комментирует...

Разобрался.