В этой статье я попытался сделать краткий обзор инструментов, которые помогают исследовать пользовательский интерфейс 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++, однако, он, пожалуй, и самый функциональный. В статье приведены четыре инструмента, с другими мне сталкиваться не приходилось, так что если вы знакомы с каким-либо еще подобным инструментом - пожалуйста, напишите об этом в комментариях.