Поиск пути к дочернему окну

Материал из UoPilot
Версия от 11:36, 28 августа 2019; Tatikoma (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Описание

Данный скрипт предназначен для автоматической генерации кода поиска дочернего окна. Скрипт находится в конце страницы.

После запуска скрипта нужно указать родительское окно (обычно это заголовок или рамка), навести курсор и нажать Ctrl + A, затем навести курсор на дочернее окно (то, к которому обычно делается привязка), нажать Ctrl + A. В результате в логе будет что-то вроде этого (строк может быть больше):

set #ownerHandle findwindow (Небеса: уникальная игра! - Игра – Yandex)
set #tmp getwindow (#ownerHandle child)
set #childHandle getwindow (#tmp )

#ownerHandle - это будет хендл родительского окна (иногда требуется для поиска в перекрытых окнах).
#childHandle - это будет хендл дочернего окна (то, к которому обычно делается привязка).
Вставляете этот код в начало вашего скрипта и дописываете:

set workwindow #childHandle     //сделать рабочим окном

В итоге получится:

set #ownerHandle findwindow (Небеса: уникальная игра! - Игра – Yandex)
set #tmp getwindow (#ownerHandle child)
set #childHandle getwindow (#tmp )
set workwindow #childHandle

Теперь, при каждом запуске скрипта будет найдено нужное окно и сделана привязка. Ctrl + A уже не потребуется.

Версия

1.3

Минимальная версия UOPilot

?

Скрипт

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
      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

Смотрите также

Set
Set windowpos
While
Showwindow
Logging

Первоисточник

Форум UOPilot