xWindowsScanner
Добавлено: Пн фев 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 Кб)
Плагин ищет окна не только по заголовку, но и по классу. Но я бы не стал делать этот плагин, если бы только нужно было искать окна по классу. Плагин так же может искать дочерние объекты окна (кнопки поля ввода, написи...) и производить над ними "издевательства ". Постараюсь в крации объяснить как пользоваться плагином, но сначало немного теории
В системе имеются много окон, которые в данный момент могут быть видимы и невидимы. Эти окна создают процессы (приложения) котрые у нас запущены в данный момент. Родителями всех окон верхнего уровня у нас 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 Кб)