|
Поиск пути к дочернему окну(скрипт) |
|
|
DarkMaster |
23.10.2013, 16:55
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27721
Пользователь №: 11.279
|
Скрипт предназначен для автоматической генерации кода поиска дочернего окна. Для работы требуется версия не ниже 2.33 v. 1.0 Оно работает! v. 1.1 Ввод хендлов через Ctrl+A. Убраны возможные проблемы со свернутым окном лога. Сделано цивильное отображение результата скрипта. Итоговый хендл теперь содержится в переменной #childHandle, а не в #var. v. 1.2 Теперь генерируется чистый код без паразитных кавычек. Спасибо Zeleax за идею. Сильно облегчен алгоритм генерирования кода. v. 1.3 Добавлена генерация поиска родительского окна по имени. Сделано агрессивное вытаскивания пилота на передний план, чтобы при нажатии Ctrl+A был активен именно пилот. v. 1.4 by Cirus Добавлено получение кода для lua. Добавлено workwindow (childHandle) и set workwindow #childHandle. Скрипт версия 1.4
Код set #lua 1 // если 1- код для lua, 0 - код для языка пилота
set linedelay 0 // Версия скрипта 1.4. // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на форуме // в специальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742 set #handlePilot findwindow () log #handlePilot log close log clear log open
set #logSizeX 300 set #logSizeY 200
set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos #x #y #logSizeX #logSizeY #handleLog log mode compact
set workwindow 0 showwindow #handlePilot log Укажите родительское окно (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #startHandle workwindow
log Теперь укажите дочернее окно (Ctrl+A) while workwindow = #startHandle wait 100 showwindow #handlePilot end_while set #targetHandle workwindow log clear
// Получаем имя родительского окна. set $ownerTitle getwindowtext (#startHandle) if $ownerTitle != "" // Генерируем только если у родительского окна есть имя. set $findwindow "findwindow" if #lua = 1 set %quote [1] chr(34) set $if "if ownerHandle then" log --lua log local ownerHandle, tmp, childHandle = $findwindow ([[$ownerTitle]]) log $if else log set #ownerHandle $findwindow ($ownerTitle) end_if end_if
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #targetHandle set #i 1 set #n 1 while #startHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #arrToIntTmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#arrToIntTmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set $beginString "set #tmp getwindo" set $middleString "w (#tmp" set $w "w" set #var getwindow (#startHandle child)
if #lua = 1 log tmp = getwindo$w (ownerHandle[1][1], "child") else log set #tmp getwindo$w (#ownerHandle child) end_if
set #i #sizeMiddleOwnerHandle - 1 set $direction "" while #var <> #targetHandle if $direction <> "" if #lua = 1 set $beginString "tmp = getwindo" set $middleString "w (tmp," log $beginString$middleString %quote [1]$direction%quote [1]) else log $beginString$middleString $direction) end_if end_if
// Выход за пределы массива if #i > #sizeMiddleOwnerHandle log Ошибка! log Пути от родительского окна log к дочернему не существует. log Возможные причины данной ошибки: log 1) Вы спутали местами дочернее и родительское окно. log 2) Вы промазали и нажали Ctrl+A по другому окну. log 3) Дочернее окно не принадлежит родительскому. end_if // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var set #var getwindow (#var child) set $direction child set #i #i - 1 else set #var getwindow (#var next) set $direction next end_if end_while
if #lua = 1 set $middleString "w (tmp," set $workwin "workwindow (childHandle)" log childHandle = getwindo$middleString %quote [1]$direction%quote [1]) log $workwin log end else set $workwin "set workwindow #childHandle" log set #childHandle getwindo$middleString $direction) log $workwin end_if
set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set #logSizeX 450 set #logSizeY screenheight / 8 * 5
set windowpos #x #y #logSizeX #logSizeY #handleLog
set $tmp "http:/" set $tmp2 "/forum.uokit.com/index.php?showtopic=26742" log log Автор скрипта DarkMaster. log Ветка на форуме: $tmp$tmp2 stop_script Скрипт версия 1.3
Код set linedelay 0 // Версия скрипта 1.3. // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на фореме // в спецальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742 set #handlePilot findwindow () log #handlePilot log close log clear log open
set #logSizeX 300 set #logSizeY 200
set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos #x #y #logSizeX #logSizeY #handleLog log mode compact
set workwindow 0 showwindow #handlePilot log Укажите родительское окно (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #startHandle workwindow
log Теперь укажите дочернее окно (Ctrl+A) while workwindow = #startHandle wait 100 showwindow #handlePilot end_while set #targetHandle workwindow log clear
// Получаем имя родительского окна. set $ownerTitle getwindowtext (#startHandle) if $ownerTitle != "" // Генерируем только если у родительского окна есть имя. set $findwindow "findwindow" log set #ownerHandle $findwindow ($ownerTitle) end_if
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #targetHandle set #i 1 set #n 1 while #startHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #arrToIntTmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#arrToIntTmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set $beginString "set #tmp getwindo" set $middleString "w (#tmp" set $w "w" set #var getwindow (#startHandle child) log set #tmp getwindo$w (#ownerHandle child) set #i #sizeMiddleOwnerHandle - 1 set $direction "" while #var <> #targetHandle if $direction <> "" log $beginString$middleString $direction) end_if // Выход за пределы массива if #i > #sizeMiddleOwnerHandle log Ошибка! log Пути от родительского окна log к дочернему не существует. log Возможные причины данной ошибки: log 1) Вы спутали местами дочернее и родительское окно. log 2) Вы промазали и нажали Ctrl+A по другому окну. log 3) Дочернее окно не принадлежит родительскому. end_if // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var set #var getwindow (#var child) set $direction child set #i #i - 1 else set #var getwindow (#var next) set $direction next end_if end_while log set #childHandle getwindo$middleString $direction)
set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set #logSizeX 450 set #logSizeY screenheight / 8 * 5
set windowpos #x #y #logSizeX #logSizeY #handleLog
set $tmp "http:/" set $tmp2 "/forum.uokit.com/index.php?showtopic=26742" log log Автор скрипта DarkMaster. log Ветка на форуме: $tmp$tmp2
stop_script Скрипт версия 1.2
Код set linedelay 0 // Версия скрипта 1.2. // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на фореме // в спецальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742 set #handlePilot findwindow () log #handlePilot log close log clear log open
set #logSizeX 300 set #logSizeY 200
set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos #x #y #logSizeX #logSizeY #handleLog log mode compact
set workwindow 0 showwindow #handlePilot log Укажите родительское окно (Ctrl+A) while workwindow = 0 wait 100 end_while set #startHandle workwindow
log Теперь укажите дочернее окно (Ctrl+A) while workwindow = #startHandle wait 100 end_while set #targetHandle workwindow log clear
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #targetHandle set #i 1 set #n 1 while #startHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #arrToIntTmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#arrToIntTmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set $beginString "set #tmp getwindo" set $middleString "w (#tmp" set $w "w" set #var getwindow (#startHandle child) log set #tmp getwindo$w (#ownerHandle child) set #i #sizeMiddleOwnerHandle - 1 set $direction "" while #var <> #targetHandle if $direction <> "" log $beginString$middleString $direction) end_if // Выход за пределы массива if #i > #sizeMiddleOwnerHandle log Ошибка! log Пути от родительского окна log к дочернему не существует. log Возможные причины данной ошибки: log 1) Вы спутали местами дочернее и родительское окно. log 2) Вы промазали и нажали Ctrl+A по другому окну. log 3) Дочернее окно не принадлежит родительскому. end_if // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var set #var getwindow (#var child) set $direction child set #i #i - 1 else set #var getwindow (#var next) set $direction next end_if end_while log set #childHandle getwindo$middleString $direction)
set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set #logSizeX 450 set #logSizeY screenheight / 8 * 5
set windowpos #x #y #logSizeX #logSizeY #handleLog
set $tmp "http:/" set $tmp2 "/forum.uokit.com/index.php?showtopic=26742" log log Автор скрипта DarkMaster. log Ветка на форуме: $tmp$tmp2
stop_script Скрипт версия 1.1
Код set linedelay 0 // Версия скрипта 1.1. // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на фореме // в спецальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742 set #handlePilot findwindow () log #handlePilot log close log clear log open
set #logSizeX 300 set #logSizeY 200
set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos #x #y #logSizeX #logSizeY #handleLog log mode compact
set workwindow 0 showwindow #handlePilot log Укажите родительское окно (Ctrl+A) while workwindow = 0 wait 100 end_while set #ownerHandle workwindow
log Теперь укажите дочернее окно (Ctrl+A) while workwindow = #ownerHandle wait 100 end_while set #childHandle workwindow log clear
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #childHandle set #i 1 set #n 1 while #ownerHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #tmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#tmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set #var getwindow (#ownerHandle child) log "set #var getwindow (#ownerHandle child)" set #i #sizeMiddleOwnerHandle - 1 while #var <> #childHandle // Выход за пределы массива if #i > #sizeMiddleOwnerHandle log Ошибка! log Пути от родительского окна log к дочернему не существует. log Возможные причины данной ошибки: log 1) Вы спутали местами дочернее и родительское окно. log 2) Вы промазали и нажали Ctrl+A по другому окну. log 2) Дочернее окно не принадлежит родительскому. end_if // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var set #var getwindow (#var child) if #var = #childHandle log "set #childhandle getwindow (#var child)" else log "set #var getwindow (#var child)" end_if set #i #i - 1 else set #var getwindow (#var next) if #var = #childHandle log "set #childHandle getwindow (#var next)" else log "set #var getwindow (#var next)" end_if end_if end_while
set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set #logSizeX 450 set #logSizeY screenheight / 8 * 5
set windowpos #x #y #logSizeX #logSizeY #handleLog
log log Внимание! log Перед использованием сгенерированного кода удалите кавчки. Если log есть идеи как обойти ограничения с экранированим кода для вывода log в лог, т.е. убрать кавычки, то пожалуйста сообщите на форум: log "http://forum.uokit.com/index.php?showtopic=26742" log Автор скрипта DarkMaster.
stop_script Скрипт версия 1.0
Код set linedelay 0 // Версия скрипта 1.1. // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на фореме // в спецальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742
// Укажите хендлы окон. set #ownerHandle 68890 // Родительское(главное) окно set #childHandle 265598 // Конечное окно
log clear log mode number
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #childHandle set #i 1 set #n 1 while #ownerHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #tmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#tmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set #var getwindow (#ownerHandle child) log "set #var getwindow (#ownerHandle child)" set #i #sizeMiddleOwnerHandle - 1 while #var <> #childHandle // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var log "set #var getwindow (#var child)" set #var getwindow (#var child) set #i #i - 1 else log "set #var getwindow (#var next)" set #var getwindow (#var next) end_if end_while
stop_script Сообщение отредактировал DarkMaster - 21.1.2019, 5:50
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
6.7.2015, 21:08
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27721
Пользователь №: 11.279
|
// Бэкап. Не обращаем внимания. Скрипт предназначен для автоматической генерации кода поиска дочернего окна. Для работы требуется версия не ниже 2.33 v. 1.0 Оно работает! v. 1.1 Ввод хендлов через Ctrl+A. Убраны возможные проблемы со свернутым окном лога. Сделано цивильное отображение результата скрипта. Итоговый хендл теперь содержится в переменной #childHandle, а не в #var. v. 1.2 Теперь генерируется чистый код без паразитных кавычек. Спасибо Zeleax за идею. Сильно облегчен алгоритм генерирования кода. Скрипт версия 1.2
Код set linedelay 0 // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на фореме // в спецальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742 set #handlePilot findwindow () log #handlePilot log close log clear log open
set #logSizeX 300 set #logSizeY 200
set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos #x #y #logSizeX #logSizeY #handleLog log mode compact
set workwindow 0 showwindow #handlePilot log Укажите родительское окно (Ctrl+A) while workwindow = 0 wait 100 end_while set #startHandle workwindow
log Теперь укажите дочернее окно (Ctrl+A) while workwindow = #startHandle wait 100 end_while set #targetHandle workwindow log clear
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #targetHandle set #i 1 set #n 1 while #startHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #arrToIntTmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#arrToIntTmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set $beginString "set #tmp getwindo" set $middleString "w (#tmp" set $w "w" set #var getwindow (#startHandle child) log set #tmp getwindo$w (#ownerHandle child) set #i #sizeMiddleOwnerHandle - 1 set $direction "" while #var <> #targetHandle if $direction <> "" log $beginString$middleString $direction) end_if // Выход за пределы массива if #i > #sizeMiddleOwnerHandle log Ошибка! log Пути от родительского окна log к дочернему не существует. log Возможные причины данной ошибки: log 1) Вы спутали местами дочернее и родительское окно. log 2) Вы промазали и нажали Ctrl+A по другому окну. log 3) Дочернее окно не принадлежит родительскому. end_if // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var set #var getwindow (#var child) set $direction child set #i #i - 1 else set #var getwindow (#var next) set $direction next end_if end_while log set #childHandle getwindo$middleString $direction)
set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set #logSizeX 450 set #logSizeY screenheight / 8 * 5
set windowpos #x #y #logSizeX #logSizeY #handleLog
set $tmp "http:/" set $tmp2 "/forum.uokit.com/index.php?showtopic=26742" log log Автор скрипта DarkMaster. log Ветка на форуме: $tmp$tmp2
stop_script Скрипт версия 1.1
Код set linedelay 0 // Данный скрипт предназначен для автоматической // генерации кода поиска дочернего окна. // Автор DarkMaster. // Вопросы и предложения оставляйте на фореме // в спецальной теме по данному скрипту. // http://forum.uokit.com/index.php?showtopic=26742 set #handlePilot findwindow () log #handlePilot log close log clear log open
set #logSizeX 300 set #logSizeY 200
set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos #x #y #logSizeX #logSizeY #handleLog log mode compact
set workwindow 0 showwindow #handlePilot log Укажите родительское окно (Ctrl+A) while workwindow = 0 wait 100 end_while set #ownerHandle workwindow
log Теперь укажите дочернее окно (Ctrl+A) while workwindow = #ownerHandle wait 100 end_while set #childHandle workwindow log clear
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #childHandle set #i 1 set #n 1 while #ownerHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #tmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#tmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set #var getwindow (#ownerHandle child) log "set #var getwindow (#ownerHandle child)" set #i #sizeMiddleOwnerHandle - 1 while #var <> #childHandle // Выход за пределы массива if #i > #sizeMiddleOwnerHandle log Ошибка! log Пути от родительского окна log к дочернему не существует. log Возможные причины данной ошибки: log 1) Вы спутали местами дочернее и родительское окно. log 2) Вы промазали и нажали Ctrl+A по другому окну. log 2) Дочернее окно не принадлежит родительскому. end_if // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var set #var getwindow (#var child) if #var = #childHandle log "set #childhandle getwindow (#var child)" else log "set #var getwindow (#var child)" end_if set #i #i - 1 else set #var getwindow (#var next) if #var = #childHandle log "set #childHandle getwindow (#var next)" else log "set #var getwindow (#var next)" end_if end_if end_while
set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set #logSizeX 450 set #logSizeY screenheight / 8 * 5
set windowpos #x #y #logSizeX #logSizeY #handleLog
log log Внимание! log Перед использованием сгенерированного кода удалите кавчки. Если log есть идеи как обойти ограничения с экранированим кода для вывода log в лог, т.е. убрать кавычки, то пожалуйста сообщите на форум: log "http://forum.uokit.com/index.php?showtopic=26742" log Автор скрипта DarkMaster.
stop_script Скрипт версия 1.0
Код set linedelay 0
// Укажите хендлы окон. set #ownerHandle 68890 // Родительское(главное) окно set #childHandle 265598 // Конечное окно
log clear log mode number
// Ищем от дочернего к родительскому, чтобы знать все child'ы set %middleOwnerHandle #childHandle set #i 1 set #n 1 while #ownerHandle <> %middleOwnerHandle [ #i ] set #i #i + 1 set #tmp %middleOwnerHandle [ #n ] set %middleOwnerHandle [ #i ] getwindow (#tmp owner) set #n #n + 1 end_while
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)
// Перебираем от родительского к дочернему. set #var getwindow (#ownerHandle child) log "set #var getwindow (#ownerHandle child)" set #i #sizeMiddleOwnerHandle - 1 while #var <> #childHandle // Текущее окно совпало с одним из чайлдов, // найденных в начале скрипта if %middleOwnerHandle [ #i ] = #var log "set #var getwindow (#var child)" set #var getwindow (#var child) set #i #i - 1 else log "set #var getwindow (#var next)" set #var getwindow (#var next) end_if end_while
stop_script
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
crax |
16.10.2017, 14:45
|
Neophyte
Сообщений: 23
Регистрация: 21.12.2009 Группа: Пользователи Наличность: 0
Пользователь №: 12.317
|
Всем доброе время суток! Не могу определить handle чтобы автоматически привязываться к окну через set workwindow. Через ctrl + a скрипт привязывается и работает нормально Предполагаю что есть дочернее окно поэтому использовал скрипт из темы версии 1.3, но результат для меня не понятен. лог скрипта: Код set #ownerHandle findwindow (BlueStacks) set #tmp getwindow (#ownerHandle child) set #childHandle getwindow (#tmp )
Автор скрипта DarkMaster. Ветка на форуме: http://forum.uokit.com/index.php?showtopic=26742
BlueStacks - родительское окно - это я понял а дочернее?? #tmp ???
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|