xWindowsScanner

В этом разделе размещены плагины и дополнительные утилиты.
Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

xWindowsScanner

Сообщение Romik© » Пн фев 12, 2007 12:37 am

Итак, заполучите ещё один плагин :). Меня многие друзья и коллеги просили его сотворить. :)Учитывал в основном их пожелание... Вот тут тоже просили.

Плагин ищет окна не только по заголовку, но и по классу. Но я бы не стал делать этот плагин, если бы только нужно было искать окна по классу. Плагин так же может искать дочерние объекты окна (кнопки поля ввода, написи...) и производить над ними "издевательства :)". Постараюсь в крации объяснить как пользоваться плагином, но сначало немного теории :)

В системе имеются много окон, которые в данный момент могут быть видимы и невидимы. Эти окна создают процессы (приложения) котрые у нас запущены в данный момент. Родителями всех окон верхнего уровня у нас Desktop, следом идут главные окна процессов, в свою очередь главные окна процессов имеют различные контролы, на которых в свою очередь могут находится другие контролы и.т.д. Можно построить дерево всех окон и всех дочерних компонентов. Чтобы обратиться к какому-нибудь окну или контролу, необходимо знать его дискриптор, даже видел где-то его "описателем" называют (по русски то биш :)). Но вот незадача, если мы один раз нашли дискриптор окна, то после уничтожения окна, дискриптор может быть другим и нам придётся его узнавать снова, поэтому окна (контролы) можно искать по заголовку. Но тут опять незадача, заголовок окна (контрола) может поменяться. Но ещё не всё потерено! У окна (контрола) есть класс :), который не меняется после перезагрузки программы или вновь его (окна) создании.
Но не всё так просто! Зная класс окна, узнать дискриптор нам не удасться пока не узнаем дискрипторы его родителей (если это контрол). Вобщем я подвожу к тому, что, например, для того чтобы нажать какую-нибудь кнопку на чужой форме, необходимо найти окно верхнего уровня, на котором эта кнопка. Если родитель кнопки не это окно, а допустим какая-нибудь панель, то следующим объектом поиска будет эта панель и.т.д. пока не доберёмся до кнопки... Поэтому чтобы манипулировать нашей кнопкой, необходимо знать дерево контролов до искомого и это всё указать при добавлении действия...

Изображение

На изображении видно частичку окна при добавлении действия...
В поле "Класс окна" указан класс (Shell_TrayWnd) окна верхнего уровня. Заголовок пропущен (будет искаться любое окно с классом Shell_TrayWnd и с любым заголовком) в системе окно это в простонародье называется - панель задач :).

В списке классов нужно указать тот самый порядок поиска окна по классам, начиная со второго от класса окна верхнего уровня (Shell_TrayWnd) и кончая окном с классом, который последний в этом списке, в данном случае это трей (область уведомлений->ToolbarWindow32). Т.е. При выполнении действия:

1. Ищется окно верхнего уровня с классом "Shell_TrayWnd"
2. В этом окне ищется объект с классом TrayNotifyWnd
3. В объекте "TrayNotifyWnd" ищется объект с классом "SysPager"
и до последнего - "ToolbarWindow32"

Когда определён дискриптор "ToolbarWindow32", мы можем с объектом делать всё что угодно (в рамках разумного конечно :))
Поле "Заголовок искомого объекта" необходимо для того случия, например, если объект имеет несколько дочерних объектов с одинаковым классом, но с разными заголовками. Но это не все ещё нюансы по этому поводу. Раскажу о них когда они у кого-нибудь возникнут :)

После того как Вы указали параметры поиска окна или объекта, Вы можете произвести с ним действия которые представленны в поле "Действие:".

У Вас уже наверно возник давно вопрос: :) "а как и где посмотреть дерево объектов до искомого?". Можно воспользоваться другими программами которые исследуют окна, а можно и данным плагином :)

Изображение

Нажав на кнопку, Вы увидете дополнительное окно

Изображение

Вот тут-то вы и сможете подсмотреть дерево всех объектов.
Как? Да очень просто :)
Берёте за мишень

Изображение

и тащите на нужный вам объект :). При этом окно добавления действия и главное окно xStarter'а будут скрыты. Если Вы желаете скрыть и выше изображённое окно, можно отметить галкой:

Изображение

После того как Вы отпустите кнопку мыши, перед Вами раскроется дерево компонентов :). Автоматически в дереве выделится выбранный объект.

После всех операций, жмите кнопку "Apply" :). Окно закроется.

Но жизнь должна казаться ещё проще :). Что бы автоматически заполнить поля, смело жмите на кнопку:

Изображение

Ну вот в принципе и всё :)

Немного о действиях над окнами (объектами) и об информации, которую можно о последних получить...

Особо действия коментировать не буду :), тут и так всё ясно.

Минимизировать окно
Восстановить размеры окна
Распахнуть на весь экран
Закрыть окно
Спрятать окно
Показать окно
Показать окно не отбирая фокус у активного
Установить статус поврх всех окон
Снять статус поверх всех окон
Активировать окно
Деактивировать окно
Нажать (для кнопок)
Сделать скриншот //Формат JPG, качество 90%
Заставить мигать окно
Установить новый заголовок
Вернуть информацию о объекте

Действие Вернуть информацию о объекте, вернёт:

WClassName - класс окна (объекта)
WCaption - заголовок окна (объекта)
WWidth - ширину окна (объекта)
WHeight - высоту окна (объекта)
WTop - Расположения от верхней части экрана
WLeft - Расположения от левой части экрана
WIsIconic - Свёрнуто ли
WIsWindowEnabled - Разрешено ли для ввода, нажатия, ...
WIsWindowVisible - Видимо ли
WIsZoomed - Максимизировано ли
WIsTOPMOST - имеет ли статус по верх всех


Вот в принципе и всё. ;) Надеюсь разоберётесь потом что к чему.

При добавлении действия, сие действие можно найти в разделе "Окна"

Изображение

В архиве самораспаковывающийся rar архив. При распаковке укажите путь к папке, куда установлен xStarter...

Скачать плагин: xWindowScanner.zip (527 Кб)
За это сообщение автора Romik© поблагодарил:
Дацык (Пн фев 12, 2007 12:37 am)
Рейтинг: 33.33%
Экономте электроэнергию, выключайте Num Lock!

Ruslan
Командир экипажа
Сообщения: 62
Зарегистрирован: Ср дек 13, 2006 2:09 am
Благодарил (а): 0
Поблагодарили: 3 раза

Сообщение Ruslan » Пн фев 12, 2007 10:48 am

Установил, но теперь при попытке открыть главное окно xStarter
вылетают друг за другом эти ошибки:
Вложения
1.JPG
1.JPG (23.31 КБ) 30237 просмотров

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Сообщение Romik© » Пн фев 12, 2007 12:34 pm

Упс :oops:, недоглядел одну вещь... Случайно ShareMem оставил...
Перекачайте плагин целиком или замените xWindowScanner.spml (xStarter\Plugins\library\xWindowScanner\xWindowScanner.spml) вот этой, которая в архиве:
WindowScanner_spml.zip
Экономте электроэнергию, выключайте Num Lock!

Аватара пользователя
iPasha
Авиаконструктор
Сообщения: 441
Зарегистрирован: Чт сен 08, 2005 5:05 pm
Благодарил (а): 0
Поблагодарили: 7 раз
Контактная информация:

Сообщение iPasha » Вт фев 13, 2007 12:15 pm

Отправил тебе багрепорт

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Сообщение Romik© » Вт фев 13, 2007 11:35 pm

Ох, надо 2003-ю ставить, на XP повторить ошибку не удалось... Я так понял, сначало был выбран один из объектов панели задач, а потом Drag панель моей формы... Ладно, буду смотреть и исправлять... ;)
Экономте электроэнергию, выключайте Num Lock!

Аватара пользователя
iPasha
Авиаконструктор
Сообщения: 441
Зарегистрирован: Чт сен 08, 2005 5:05 pm
Благодарил (а): 0
Поблагодарили: 7 раз
Контактная информация:

Сообщение iPasha » Чт фев 15, 2007 7:22 pm

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

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Сообщение Romik© » Чт фев 22, 2007 6:40 pm

Поставил Microsoft Windows Server 2003, версия "5.2.3790", Service Pack 1, Russian.
Поставил Windows 2000 pro SP4.
Долго тестировал на обеих осях... всё работет как часы, куда бы я не водил мишенью, впрочем как и на Windows XP pro SP2.

Но всётаки решил переделать способ наведения мишени на объекты...
Если ничего не изменится, то я уже ничего не могу поделать... У меня на свеже установленной 2003 винде всё работает...

Обновлённая версия: xWindowScanner.zip (528 Кб)
Экономте электроэнергию, выключайте Num Lock!

Аватара пользователя
iPasha
Авиаконструктор
Сообщения: 441
Зарегистрирован: Чт сен 08, 2005 5:05 pm
Благодарил (а): 0
Поблагодарили: 7 раз
Контактная информация:

Сообщение iPasha » Вт фев 27, 2007 11:18 am

Проверю - отпишу!

Аватара пользователя
iPasha
Авиаконструктор
Сообщения: 441
Зарегистрирован: Чт сен 08, 2005 5:05 pm
Благодарил (а): 0
Поблагодарили: 7 раз
Контактная информация:

Сообщение iPasha » Пн мар 05, 2007 9:09 am

Приветствую! Ну вроде нормально. Только вот есть один неприятный, то есть неудобный момент, а именно: когда начинаешь поиск окна, в случае если xstarter развернут на весь экран, то не получается переключиться в другие приложения. Может быть я что-то делаю не так? ;-)

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Сообщение Romik© » Вт мар 06, 2007 11:51 pm

Обновился плагин! Функционал не менелся, поменялось расположение плагина. Подробности тут

Обновлённая версия: xWindowScanner.zip (529 Кб)
Приветствую! Ну вроде нормально. Только вот есть один неприятный, то есть неудобный момент, а именно: когда начинаешь поиск окна, в случае если xstarter развернут на весь экран, то не получается переключиться в другие приложения. Может быть я что-то делаю не так?
Не совсем поянл ситуацию. Попробовал развернуть окно xstarter на весь экран и навести target на нужное мне окно или конрол. Все окна стартера по задумке как и должно быть спрятались и осталось только окно моего плагина (я убрал возможность скрывать это окно, поскольку в плагине реализовал интересный метод слежения за событиями мыши в не собственного окна без использования хуков :)). После того как кнопка мыши была отпущена на конрол или на окно, окна стартера снова появляются.
Во время наведения мишени категорически нельзя переключаться между окнами по Alt+Tab или прятать окно моего плагина! :). Со следующей версией сделаю это окно по верх всех, или всётаки прилеплю ещё одну библиотеку с хуком на мышь. Кстати, в следующей версии по задумке можно будет понажимать на пункты галавного меню любого приложения, активировать или деактивировать, или прятать любой из пунктов меню :)
Экономте электроэнергию, выключайте Num Lock!

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Сообщение Romik© » Вт май 08, 2007 5:30 pm

Всем привет! ;)

Обновление плагина в связи с выходом новой версии xStarter.

Changes:
[!] Перекомпилирован плагин;

[+] Многие писали что не всегда отрабатывается нажатие той или иной кнопки. В 9 из 10 случаев причиной тому являлось принадлежание одному и тому же родителю несколько компонентов с одинаковыми классами. Плагин, отыскав первый класс данного уровня удоветворяющий условию поиска, прекращал поиск несмотря на то, что на этом же уровне есть ещё один компанент с таким же классом, который был и нужен.

Например, мы хотим нажать на кнопку, которая выделена в дереве классов. См. рис. ниже
Изображение

По умолчанию плагин найдя первый TPanel, будет там искать кнопку, например ту выделенную на рис. ниже
Изображение

Но если это нам не надо, мы явно сможем указать на каком классе (начиная сверху по счёту) остановится плагину и искать уже нужную кнопку...
Изображение

Выше на рисунке видно, что в списке классов, рядом с TPanel стоит <2>. Это значит, что если родителю будет принадлежать хоть 10 таких панелей, искаться всёравно будет вторая панель в дереве классов... Таким образом мы получам доступ ко всем элементам формы независемо от её сложности...

[!!] Исправлены некоторые недоработки.

Скачать плагин: xWindowScanner.zip (527 Кб)
Экономте электроэнергию, выключайте Num Lock!

And
Пассажир
Сообщения: 1
Зарегистрирован: Вс сен 02, 2007 4:33 pm
Благодарил (а): 0
Поблагодарили: 0

Re: xWindowsScanner

Сообщение And » Вс сен 02, 2007 4:40 pm

а возможен ли разбор, Macromedia Flash приложения встроенного в Explorer

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Re: xWindowsScanner

Сообщение Romik© » Пт сен 07, 2007 3:43 pm

And писал(а):а возможен ли разбор, Macromedia Flash приложения встроенного в Explorer
Такой возможности нет.
Экономте электроэнергию, выключайте Num Lock!

Аватара пользователя
LizardOfOzz
Гвардии пилот - Наставник
Сообщения: 1165
Зарегистрирован: Пт сен 08, 2006 8:59 pm
Благодарил (а): 8 раз
Поблагодарили: 38 раз
Контактная информация:

Re: xWindowsScanner

Сообщение LizardOfOzz » Пт мар 14, 2008 2:39 pm

Поддержка плагина ещё ведётся?
Изображение Изображение

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Re: xWindowsScanner

Сообщение Romik© » Сб мар 15, 2008 7:08 pm

А что ещё бы хотелось? :)
Экономте электроэнергию, выключайте Num Lock!

Ответить

Вернуться в «Плагины и программы-дополнения»