Для работы требуется версия не ниже 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