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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Поиск пути к дочернему окну(скрипт)
DarkMaster
сообщение 23.10.2013, 16:55
Сообщение #1


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.10.2013, 20:20
Сообщение #2


***********

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



Прилизано, обновлено.

Вопрос как уйти от кавычек все еще очень актуален.


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


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Первый пример без кавычек
Код
set linedelay 0

// Укажите хендлы окон.
set #ownerHandle 14158476 // Родительское(главное) окно
set #childHandle 4195826 // Конечное окно

log open
log clear
log mode compact

// Ищем от дочернего к родительскому, чтобы знать все 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)
set $s1 set #var2 getwindo
set $s2 w (#ownerHandle2 child)
log $s1$s2
set #i #sizeMiddleOwnerHandle - 1
while #var <> #childHandle
      // Текущее окно совпало с одним из чайлдов,
      // найденных в начале скрипта
      if  %middleOwnerHandle [ #i ] = #var
          set $s1 set #var2 getwindo
          set $s2 w (#var2 child)
          log $s1$s2
          set #var getwindow (#var child)
          set #i #i - 1
      else
          set $s1 set #var2 getwindo
          set $s2 w (#var2 next)
          log $s1$s2          
          set #var getwindow (#var next)
      end_if
end_while

stop_script


По аналогии можно и имена переменных сохранить, если разбивать на 3 и более строковых переменных
Имхо, можно ещё и подпрограмку забацать, в которую передаются слова child, next и т.п., и которая формирует строку для вывода лог

З.Ы.: насчет обработки Ctrl+A классно ты придумал )

Сообщение отредактировал Zeleax - 24.10.2013, 20:54


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.10.2013, 21:21
Сообщение #4


***********

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



При твоем варианте #var заменится. Причем даже если раскинуть на несколько переменных. Это уже все пройдено) А вот подпрограмма должна сработать.


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


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(DarkMaster @ 24.10.2013, 21:21) *

При твоем варианте #var заменится. Причем даже если раскинуть на несколько переменных. Это уже все пройдено) А вот подпрограмма должна сработать.

этот скрипт уже проверен и работает правильно )
если переменная не инициализирована, то имя не будет заменено значением

Сообщение отредактировал Zeleax - 24.10.2013, 23:12


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.10.2013, 23:30
Сообщение #6


***********

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



теперь понял, что ты сделал.

надо было под другим углом на это дело взглянуть. форум в этом помогает и сильно.


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


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Твой скрипт работает отлично. Допили кавычки и будет идеально )

З.Ы.: возможно лучше использовать процедуры, а не подпрограммы для вывода в лог (переменные с любыми именами будут не инициализированы)
З.З.Ы.: одна голова хорошо, а форум лучше (с) (IMG:style_emoticons/default/smile.gif)

Сообщение отредактировал Zeleax - 24.10.2013, 23:46


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.10.2013, 0:26
Сообщение #8


***********

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



Допилил. Скрипт вряд ли будет использоваться внутри других так, что не думаю, что есть смысл в подпрограммах/процедурах.

Сообщение отредактировал DarkMaster - 25.10.2013, 0:34


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


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.11.2015, 13:50
Сообщение #10


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Скрипт не работает для Paint.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.11.2015, 14:20
Сообщение #11


***********

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



Какая версия и что есть не работает?

винда какая? пэинт везде разный.


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


***********

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



Сейчас протыкал через дерево окон и через скрипт. Если в 2 словах, то верхняя плашка окна (с крестиком, свернуть, развернуть) не является у пэинта родительским оконом, через нее привязывать скрипт бесполезно. Естественно найти путь от дочернего к родительскому не получится, т.к. это не дочернее и родительское окно. Можно сделать какой-нибудь гибрид с плагином, либо указывать в явном виде через findwindow хендл родительского окна.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
Какая версия и что есть не работает?
винда какая? пэинт везде разный.

Win7.
Цитата
Если в 2 словах, то верхняя плашка окна (с крестиком, свернуть, развернуть) не является у пэинта родительским оконом

Тогда понятно, почему не работает. Просто скрипт даже не доходит до строки где в лог выводятся варианты ошибки.

Сделал через плагин по классу окна.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 16.10.2017, 14:45
Сообщение #14


**

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 ???
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.10.2017, 14:53
Сообщение #15


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
а дочернее??

#childHandle
Код
set #ownerHandle findwindow (BlueStacks)
set #tmp getwindow (#ownerHandle child)
set #childHandle getwindow (#tmp )
set workwindow #childHandle    // сделать рабочим окном

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 16.10.2017, 15:00
Сообщение #16


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



Тоесть если добавлю строчку
Log #childHandle
Получу его название?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.10.2017, 15:18
Сообщение #17


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
Тоесть если добавлю строчку
Log #childHandle
Получу его название?

Не название, а хендл окна.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 16.10.2017, 15:42
Сообщение #18


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



Цитата(cirus @ 16.10.2017, 15:18) *

Не название, а хендл окна.


в логе получаю только #childHandle ((
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 16.10.2017, 20:06
Сообщение #19


***********

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



Цитата
в логе получаю только #childHandle ((

Ну так а предыдущий код вы тоже вставили?


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


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



разобрался спасибо!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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