Прицеп к Spy++

Тема в разделе "WASM.PROJECTS", создана пользователем kero, 4 май 2007.

  1. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    (Для 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 всего лишь набросок, наверняка с ошибками, найдете - дайте знать.

    [​IMG]

    ------
    +
    Для Spy++ всех версий (4...11): 4spyxx.zip (подробнее: http://rsdn.ru/forum/winapi/3853347.1.aspx)
    .
     
  2. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    [Spy++ без потаскухи - 2]
    "Прицеп" 4spyxx из первого поста - это реакция на досадную ограниченность Spy++ как искателя окон.
    Новый "прицеп" hook4spyxx расширяет возможности Spy++ уже на основном его поприще - отслеживании оконных сообщений.
    Ничего хитрого: в игру введен HCBT_CREATEWND. Посему Spy++ больше не прозевывает начальные сообщения окон, к тому же некоторые недоступные ему прежде окна перестали быть таковыми.
     
  3. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Вот как Spy++ через hook4spyxx засекает инициализацию message-only окна класса CicMarshalWndClass при запуске скринсейвера:

    [​IMG]

    Хелп внутри утилитки, можно вызвать из системного меню или пощелкав правым кликом по кнопке комбобокса.
     
  4. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    То не фотке (вверху) кирдык - то 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 (считайте продолжением старого топика "Получить текст из меню/контрола"):

    [​IMG]

    Временно не убрал один глючок, специально оставил для любителей :)

    Вкратце о 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)
    ---