Здравствуйте, гость ( Вход | Регистрация )

> Плагин для получения информации об окне.
DarkMaster
сообщение 18.8.2015, 23:52
Сообщение #1


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Потихоньку начинаю все приводить к товарному виду.

WindowStatus.Parent - готов.
WindowStatus.Find - Поиск окна по имени и классу - готов.
WindowStatus.allStatus - не допилен.
WindowStatus.Top - не допилен, работает только с потоками не принадлежащими плоту.
WindowStatus.Ready - страдает из-за WindowStatus.Top.

Предложения, что еще выдернуть по статусам окна приветствуются.
В планах есть:
Поиск окна по имени и классу.
Анализ видимости окна на экране и координаты видимой точки.

windowName (<handle>) - запрашивает имя окна.

windowName (<handle>) - запрашивает имя окна.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Первый элемент массива содержит код ошибки:
0 - функция успешно вернула данные.
1 - внутренняя ошибка функции.
2 - хендл не существует.
Второй элемент содержит имя окна.
Код
set %a WindowStatus.windowName(workwindow)
log  имя окна:                %a [1 1]        %a [1 2]

className (<handle>) - запрашивает класс имя окна.

className (<handle>) - запрашивает класс имя окна.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Первый элемент массива содержит код ошибки:
0 - функция успешно вернула данные.
1 - внутренняя ошибка функции.
2 - хендл не существует.
Второй элемент содержит имя класса окна.
Код
set %a WindowStatus.className (workwindow)
log  имя класса окна:         %a [1 1]        %a [1 2]

pidAndTid (<handle>) - запрашивает PID и TID процесса, которому принадлежит окно.

pidAndTid (<handle>) - запрашивает PID и TID процесса, которому принадлежит окно. PID - номер процесса, TID - номер потока.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
В первый элемент массива помещается результат запроса PID'а.
Во второй элемент массива помещается результат запроса TID'a.
Возвращает результат:
0 - ошибка функции.
4 - хендл не существует.
x - все прочие значения являются корректными ID.
Код
set %a WindowStatus.pidAndTid (workwindow)
log  PID:                     %a [ 1 1 ]
log  TID:                     %a [ 1 2 ]

windowSize (<handle>) - получение сведений о размере и расположении окна.

windowSize (<handle>) - получение сведений о размере и расположении окна. Результат функции должен принимать массив.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Первый элемент массива содержит код ошибки:
0 - функция успешно вернула данные.
1 - внутренняя ошибка функции.
2 - хендл не существует.
Код
set %a WindowStatus.windowSize (workwindow)
log  получение размера успех: %a [ 1 1 ]
log  ширина:                  %a [ 1 2 ]
log  высота:                  %a [ 1 3 ]
log  startx:                  %a [ 1 4 ]
log  startY:                  %a [ 1 5 ]
log  endX:                    %a [ 1 6 ]
log  endY:                    %a [ 1 7 ]

minimized (<handle>) - запрашивает свернуто ли окно.

minimized (<handle>) - запрашивает свернуто ли окно.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - не минимизировано.
1 - минимизировано.
2 - хендл не существует.
Код
set #a WindowStatus.minimized (workwindow)
log  минимизировано:          #a

maximized (<handle>) - запрашивает максимизировано ли окно (развернуто на весь экран).

maximized (<handle>) - запрашивает максимизировано ли окно (развернуто на весь экран).
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - не максимизировано.
1 - максимизировано.
2 - хендл не существует.
Код
set #a WindowStatus.maximized (workwindow)
log  максимизировано:         #a

visible (<handle>) - запрашивает видимо ли окно.

visible (<handle>) - запрашивает видимо ли окно. Подразумевается флаг скрытого окна, а не фактическая видимость на экране.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - невидимо.
1 - видимо.
2 - хендл не существует.
Код
set #a WindowStatus.visible (workwindow)
log  видимое:                 #a

enabled (<handle>) - запрашивает восприимчивость окна для совершения действий (клики, нажатия клавиш и т.д.).

enabled (<handle>) - запрашивает восприимчивость окна для совершения действий (клики, нажатия клавиш и т.д.).
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - блокировано.
1 - доступно.
2 - хендл не существует.
Код
set #a WindowStatus.enabled (workwindow)
log  доступно:                #a

top (<handle>) - запрашивает является ли данное окно в фокусе (на переднем плане).

top (<handle>) - запрашивает является ли данное окно в фокусе (на переднем плане).
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - окно не на переднем плане.
1 - окно на переднем плане.
2 - хендл не существует.
Код
set #a WindowStatus.top (workwindow)
log  на переднем плане:       #a

topmost (<handle>) - запрашивает является ли окно отображаемым поверх всех окон.

topmost (<handle>) - запрашивает является ли окно отображаемым поверх всех окон.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - не поверх всех окон.
1 - поверх всех окон.
2 - хендл не существует.
Код
set #a WindowStatus.topmost (workwindow)
log  поверх всех окон:        #a

parentTop (<handle>) - запрашивает на переднем плане находится родительское окно или нет.

parentTop (<handle>) - запрашивает на переднем плане находится родительское окно или нет. Под родительским окном подразумевается окно верхнего уровня.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - не на переднем плане.
1 - на переднем плане.
2 - хендл не существует.
Код
set %a WindowStatus.parentTop (workwindow)
log  родительское активно:    %a[1 1]    %a[1 2]

upper (<handle>) - запрашивает является ли окном верхнего уровня.

upper (<handle>) - запрашивает является ли окном верхнего уровня.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - верхнего уровня.
1 - дочернее.
2 - хендл не существует.
Код
set #a WindowStatus.upper (workwindow)
log  верхнего уровня (род):   #a

ready (<handle>) - комплексный запрос информации об окне с целью понять готовность окна к работе.

ready (<handle>) - представляет собой комплексный запрос информации об окне с целью понять готовность окна к работе. Окно считается готовым к работе, если оно:не минимизировано, видимо, доступно, на переднем плане.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
0 - не минимизировано.
1 - минимизировано.
2 - хендл не существует.
Код
set #a WindowStatus.ready (workwindow)
log  готово к работе:         #a

allStatus (<handle>) - собирает полную информацию об окне.

allStatus (<handle>) - собирает полную информацию об окне. В стадии разработки.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
Возвращает результат:
parentAndChild (<handleParent> <handleChild>) - запрашивает является ли пара окон друг другу родительским и дочерним.

parentAndChild (<handleParent> <handleChild>) - запрашивает является ли пара окон друг другу родительским и дочерним.
<handle> - обязательный параметр. Содержит в себе хендл окна о котором запрашивается информация. Для запроса информации о рабочем окне можно указать 'workwindow'(без кавычек).
<handleParent> - хендл родительского окна.
<handleChild> - хендл дочернего окна.
Возвращает результат:
0 - не являются родительским и дочерним.
1 - являются родительским и дочерним.
2 - хендл не существует.
Код
set #a WindowStatus.parentAndChild (#handleParent #handleChild)
log  родительское и дочернее: #a

find (<fullNameFlag><caseNameFlag><fullClassNameFlag><caseClassNameFlag> <windowName> <windowClassName>) - функция поиска окон по заданным имени и классу.

find (<fullNameFlag><caseNameFlag><fullClassNameFlag><caseClassNameFlag> <windowName> <windowClassName>) - функция поиска окон по заданным имени и классу. Результат работы должен принимать массив, т.к. находятся все окна с заданными параметрами, а не только первое совпавшее.
<fullNameFlag> - флаг полного имени. В выключенном состоянии позволяет задать только часть имени. 0 - выкл, 1 - вкл.
<caseNameFlag> - флаг чувствительности к регистру букв при сравнении имени окна. 0 - выкл, 1 - вкл.
<fullClassNameFlag> - флаг полного имени класса. В выключенном состоянии позволяет задать только часть имени класса. 0 - выкл, 1 - вкл.
<caseClassNameFlag> - флаг чувствительности к регистру букв при сравнении имени класса окна. 0 - выкл, 1 - вкл.
<windowName> - имя окна, которое требуется найти.
<windowClassName> - имя класса окна, которое требуется найти.
Флаги могут задаваться как слитно, так и раздельно.
Имена окна и класса окна задаются через пробел. Если имя содержит в себе пробелы, то необходимо обособить его знаками '*' (без кавычек).
Если необходимо проигнорировать имя или класс окна, то следует задать параметр пустым с помощью символов '*', например:
Код
set %a WindowStatus.find (1111 ** TchatFrm)
set %a WindowStatus.find (1111 *Окно чата* **)

Возвращает хендлы найденных окон в элементы массива:
%arr [1 1]
%arr [1 2]
%arr [1 3]
и т.д.
Если окон не было найдено, то в:
%arr [1 1] помещается ноль.
Код
set %a WindowStatus.find (1111 *Окно чата* TchatFrm)
log  найдено:                %a [1 1]    %a [1 2]    %a [1 3]    %a [1 4]
set %a WindowStatus.find (0110 Браузер myClass)
log  найдено:                %a [1 1]    %a [1 2]    %a [1 3]    %a [1 4]



Глобальный скрипт по выводу информации об окне
Код

set linedelay 0
set #dev 1
if  #dev = 1
    log close
    log clear
    log open 1430 -10 500 1080
    log mode compact
    set #handleLogWindow findwindow ("Log Window")
    showwindow #handleLogWindow restore
    set #handleUoPilot findwindow ("UoPilot")
end_if
set $bmp ".bmp"

:start

//wait 2s
//pluginload pluginunload pluginreload
//pluginunload
//filedelete
//filecopy
//pluginload

set #window workwindow

set %a WindowStatus.windowName(#window)
log  имя окна:                %a [1 1]        %a [1 2]
set %a WindowStatus.className (#window)
log  имя класса окна:         %a [1 1]        %a [1 2]
set %a WindowStatus.pidAndTid (#window)
log  PID:                     %a [ 1 1 ]
log  TID:                     %a [ 1 2 ]
set %a WindowStatus.windowSize (#window)
log  получение размера успех: %a [ 1 1 ]
log  ширина:                  %a [ 1 2 ]
log  высота:                  %a [ 1 3 ]
log  startx:                  %a [ 1 4 ]
log  startY:                  %a [ 1 5 ]
log  endX:                    %a [ 1 6 ]
log  endY:                    %a [ 1 7 ]
set #a WindowStatus.minimized (#window)
log  минимизировано:          #a
set #a WindowStatus.maximized (#window)
log  максимизировано:         #a
set #a WindowStatus.visible (#window)
log  видимое:                 #a
set #a WindowStatus.enabled (#window)
log  доступно:                #a
set #a WindowStatus.top (#window)
log  на переднем плане:       #a
//set %a WindowStatus.top (#window)
//log  %a [1 1]
//log  %a [1 2]
//log  %a [1 3]
//log  %a [1 4]
//log  %a [1 5]
set #a WindowStatus.topmost (#window)
log  поверх всех окон:        #a
set %a WindowStatus.parentTop (#window)
log  родительское активно:    %a[1 1]    %a[1 2]
set #a WindowStatus.upper (#window)
log  верхнего уровня (род):   #a
set #a WindowStatus.ready (#window)
log  готово к работе:         #a
log ______________________
set #a WindowStatus.parentAndChild (198492 525830)
log  родительское и дочернее: #a
set %a WindowStatus.find (1111 *Окно чата* TchatFrm)
log  найдено:                %a [1 1]    %a [1 2]    %a [1 3]    %a [1 4]


Сообщение отредактировал DarkMaster - 11.11.2015, 14:18


Прикрепленные файлы
Прикрепленный файл  WindowStatus_0.9.zip ( 7,13 килобайт ) Кол-во скачиваний: 1390


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
DarkMaster   Плагин для получения информации об окне.   18.8.2015, 23:52
Cockney   Немного не понял задачу плагина, но.... можно ли в...   19.8.2015, 0:12
cirus   Этот вариант плагина нормально запускается и работ...   19.8.2015, 2:38
DarkMaster   Задача в 1 очередь была вытянуть состояние видими...   19.8.2015, 5:49
Cockney   Конкретнее. Размер кнопок, полей ввода. Доступ...   19.8.2015, 11:29
DarkMaster   Как правило - это и есть размер окна. Кнопка - эт...   19.8.2015, 18:30
DarkMaster   Вот это кстати вернет будет ли именно в данное ок...   19.8.2015, 19:36
cirus   А оно работает? Всегда 0 показывает, хотя окно ак...   20.8.2015, 2:17
DarkMaster   Хм... Где-то отвалил, когда под релиз немного прич...   20.8.2015, 11:40
DarkMaster   Поправил. Ковыряю фишечки дальше. Релизить буду хо...   20.8.2015, 14:54
Cockney   Cockney, надо что-то из этого? Ну, что мне по...   20.8.2015, 18:34
DarkMaster   Кнопки ожидают эвента, обычно либо клика либо кла...   20.8.2015, 18:55
Cockney   хорощо,просто не знал, про данный метод   20.8.2015, 22:06
DarkMaster   Зато как много узнал, что оказывается можно уже с...   21.8.2015, 1:31
cirus   Если убрана галка автоматически отрывать лог, при ...   21.8.2015, 2:28
DarkMaster   21.08.2015 18:57:04, WKnight починил падение   21.8.2015, 15:59
DarkMaster   Глобальный апдейт. Починен upper(он же parent). До...   24.8.2015, 0:42
cirus   Начиная с 39 строки выдает: символ не распознан (p...   24.8.2015, 1:10
DarkMaster   Вообще везде или только в 39 строке? Только что за...   24.8.2015, 1:40
cirus   Все set начиная с 39 строки и массив с данными об ...   24.8.2015, 1:47
DarkMaster   Ща на почту скину пилота, на этой версии попробуй....   24.8.2015, 1:53
cirus   Теперь работает.   24.8.2015, 1:57
DarkMaster   имена плагинов жестко привязаны к именам дллок. На...   24.8.2015, 1:59
cirus   Имени класса. Я так понял поиск работает при усло...   24.8.2015, 2:41
DarkMaster   Да, но имя может быть пустым. Попробуй вместо име...   24.8.2015, 11:57
cirus   Работает, если ** поставить.   24.8.2015, 12:24
cirus   Допиши set в описании под спойлером. Подправь им...   25.8.2015, 3:23
DarkMaster   Спасибо. Интересно как так получилось... копипасти...   25.8.2015, 11:16
cirus   Скорее всего так: set %a WindowStatus.find (1...   25.8.2015, 11:44
DarkMaster   А вот это с теста осталось :)   25.8.2015, 11:59
cirus   Я бы даже сказал, что оно до сих пор осталось. По...   11.11.2015, 13:46
DarkMaster   Вроде убирал... Убрал еще раз... Спасибо.   11.11.2015, 14:19
cirus   Наверное должно быть: 0 - не готово 1 - готово   14.2.2016, 22:23
CAHEK-555   Приветствую участников данного форума! DarkMa...   13.1.2017, 4:08
cirus   Удалено.   28.1.2017, 22:44
фонарик   Товарищ DarkMaster, есть очень сильные подозрения ...   3.8.2021, 12:23
DarkMaster   Там какие-то косяки с локалями. Я уже не помню, ес...   9.8.2021, 18:32


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 9:16
Designed by Nickostyle