(Для Spy++ версий 6.00.8168, 7.10.3077). Чтобы спай автоматизировать и чтобы он мог работать и с нестабильными окнами, достаточно использовать не "потаскуху" из Finder Tool, а внешний "прицепчик" 4spyxx (в аттаче): выбор окна будет осуществляться наведением курсора + SHIFT. Итак, запускаем 4spyxx (до или после запуска спая, без разницы), в спае активным окном устанавливаем [Windows *], в 4spyxx выбираем один из режимов работы: Select: тогда после SHIFT — фиксация выбранного окна. Properties: после SHIFT — фиксация выбранного окна + спаевская инфа "Window Properties". Messages: после SHIFT — фиксация выбранного окна + показ перехвата сообщений. Auto_Refresh: после SHIFT — фиксация выбранного окна с автоматическим обновлением дисплея Spy++. Auto_Select: показ окна под курсором без фиксации выбора, а после SHIFT — переход в режим Select. Z_from_point: после SHIFT — фиксация выбранной точки экрана, + выбор содержащего эту точку окна при помощи клавиш "UP ARROW" и "DOWN ARROW". "Refresh" и "Windows" просто выполняют одноименные пункты меню спая. Примеры работы спая с прицепом: 1) Выясняем, что происходит с деревом окон при WIN+D: "Refresh" в прицепе, WIN+D, "Windows" в прицепе, и сравниваем окна [Windows 1] и [Windows 2] в спае. А можно и помониторить: Auto_Refresh в прицепе, курсор на свободное место экрана, SHIFT, и смотрим в спай, повторяя WIN+D... 2) Смотрим свойства окна класса #32768: Properties в прицепе, вызываем контекстное меню, наводим на его окно курсор, и — SHIFT. 3) Перехватываем сообщения в короткоживущем окне класса SysDragImage: Messages в прицепе, драгдропим к.н. иконку и — SHIFT. P.S. 4spyxx всего лишь набросок, наверняка с ошибками, найдете - дайте знать. ------ + Для Spy++ всех версий (4...11): 4spyxx.zip (подробнее: http://rsdn.ru/forum/winapi/3853347.1.aspx) .
[Spy++ без потаскухи - 2] "Прицеп" 4spyxx из первого поста - это реакция на досадную ограниченность Spy++ как искателя окон. Новый "прицеп" hook4spyxx расширяет возможности Spy++ уже на основном его поприще - отслеживании оконных сообщений. Ничего хитрого: в игру введен HCBT_CREATEWND. Посему Spy++ больше не прозевывает начальные сообщения окон, к тому же некоторые недоступные ему прежде окна перестали быть таковыми.
Вот как Spy++ через hook4spyxx засекает инициализацию message-only окна класса CicMarshalWndClass при запуске скринсейвера: Хелп внутри утилитки, можно вызвать из системного меню или пощелкав правым кликом по кнопке комбобокса.
То не фотке (вверху) кирдык - то RSDN кирдык... -------- + 2011-07-06 upd) Насчет окна меню (#32768): Spy++ отказывается следить за этим окном впрямую, но можно вкривую - см. http://rsdn.ru/forum/winapi/3853347.all.aspx . (Вариант А: узнаем или создаем поток, в котором будет создано #32768, открываем в Spy++ окно "Threads", находим поток, в его контекстном меню выбираем "Messages", после чего создаем #32768... Вариант Б: в файле spyxx.exe находим единственную в нем строчку "#32768" (для спая версий 4-6 она ANSI, для 7-10 — Unicode) и заменяем в ней "68" на, скажем, "73"; пользоваться с осторожностью...) А еще вот набросок MenuSpy (считайте продолжением старого топика "Получить текст из меню/контрола"): Временно не убрал один глючок, специально оставил для любителей Вкратце о MenuSpy: 1) локальный WH_CALLWNDPROC (+hook) - только ради демонстрации сообщений у #32768 (но заодно уж и покурожил окошко #32768, посмотреть, что изменяемо, что нет); 2) на лету безкликово и безхуково ловит меню под курсором; 3) показывает всю ветку (-tree) этого меню, либо все дерево (+tree) , в которое это меню входит (используется спорная самопальная GetMenuAncestor), а также все то же самое для дворда, введенного в поле "IsMenu"; 4) сжатый хелп - в меню "?"; 5) в архив добавлен вариант демки ExtantMenu --- Между прочим, VirusTotal этот архив считает опасным: MenuSpy.exe ExtantMenu.exe Вот какой опасный ключ /merge:.data=.text /merge:.idata=.text --- Sample#2 к MenuSpy (окно popupmenu, не обязанное закрываться после клика): http://files.rsdn.ru/42164/specmenu.zip (подробнее - http://rsdn.ru/forum/winapi/4343693.1.aspx) ---