Author Topic: Костылим wndfindarr  (Read 3715 times)

0 Members and 1 Guest are viewing this topic.

Mind War

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Костылим wndfindarr
« on: February 27, 2021, 05:38:31 PM »
А где полный архив скачать?
В последнем доступном к скачке - только .exe'шник и хелп, а без файлов настроек и прочего сопутствующего - кликер ловит глюки и не работает(тест - банально wndfindarr не подсвечивает, и не обрабатывает никак. Памагити

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Костылим wndfindarr
« Reply #1 on: February 27, 2021, 06:06:59 PM »
Так там только экзешник со справкой и новые. Кидаешь в версию 4.13.14 финальную с заменой и фсьоо.
Можешь даже имя дать другое и будут две версии в одной папке.


Mind War

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Костылим wndfindarr
« Reply #2 on: February 27, 2021, 08:21:18 PM »
Так там только экзешник со справкой и новые. Кидаешь в версию 4.13.14 финальную с заменой и фсьоо.
Можешь даже имя дать другое и будут две версии в одной папке.


4.13.014x32 если имеется ввиду эта версия - wndfindarr не заработал, потому и пишу((

Mind War

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Костылим wndfindarr
« Reply #3 on: February 28, 2021, 04:54:18 PM »
Запилил на коленке костыль, тоже в общем-то подходит, но мб можно что-то пошустрее работающее сделать?
Здесь по горизонтали 135 точек(экран 1920х1080, очевидная формула в 4й строке), по вертикали 120. охват - по окнам 95+%
Code: (clickermann) [Select]
for($i1,$i1<135) //начинаем с цикла ширины(по ходу скрипта будет проверка hwnd идти сначала сверху вниз, дойдя до нижней границы экрана идет сдвиг вправо и начинаем с верхней границы
      $i2=0 //обнуляем итую 2
      for($i2,$i2<120) //цикл высоты, итая постоянно обнуляется чтобы не ограничивать наполнение массива только первым рядом hwnd
         $pix=hget($i2*15,$i1*7) //получаем hwnd в заданной точке
         arrpush($arr,$pix)   //вносим данные в массив
      end_cyc
      logwrite($i1)  //лог отчет о завершении каждого вертикального ряда
   end_cyc
   logwrite(arrsize($arr))  //вывод размера массива
   arrsort($arr)   //сортировка массива - очешуенно важная штука, ускоряет фильтрацию повторяющихся значений многократно
   $i=0
   for($i,$i<arrsize($arr)) //цикл фильтрации и вывода
      if($i=0)//если цикл совершает первый шаг - значение выводится без проверок
         logwrite($arr[$i])
         $f_old=$arr[$i] //переменная, содержащая предыдущий вывод
      else //если цикл совершает НЕ первый шаг
         if($arr[$i]=$f_old) //проверка на совпадение текущего значения с предыдущим
         //если совпадает - происходит НИЧЕГО =)
         else //если не совпадает - ничего страшного, так тоже бывает
            logwrite($arr[$i]," - ",hgettext($arr[$i]))//выводим сам hwnd и имя окна, если доступно.
            $f_old=$arr[$i] //тоже заносим инфо для последующей проверки
         end_if
      end_if
   end_cyc
« Last Edit: February 28, 2021, 05:06:19 PM by Mind War »

JacsoN

  • Активный участник
  • ***
  • Posts: 152
  • извините но мне нужны полнейшие обяснения
    • View Profile
Re: Костылим wndfindarr
« Reply #4 on: February 28, 2021, 11:44:34 PM »
а  шо тут не  так ? чтото с  кодом  ?
если  есть  возможность  объясни  по  скайпу  что  да  как

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Костылим wndfindarr
« Reply #5 on: March 04, 2021, 10:14:51 AM »
а  шо тут не  так ? чтото с  кодом  ?

Код как код, только слишком объемный, медленный, и алгоритм хромает.
Массив надо выкинуть, вместе с сортировкой и циклом "фильтрации и вывода". Лишних операций, logwrite и переменных, в коде тоже быть не должно. Это в идеале конечно, в "боевом" варианте скрипта. Для "коленочного" варианта и так сойдет.

Перебор массива со сравнением его элементов - очень тяжелая вещь. Строковые функции работают намного быстрее. Например в STRPOS имеется свой собственный цикл для перебора и сравнения, который работает на более низком уровне и по определению более быстрый, чем конструкции FOR + IF.

Вариант со строкой почти в 2 раза быстрее:
Code: (clickermann) [Select]
$str = ""
FOR($i1 = 0, $i1 < 135) // начинаем с цикла ширины (по ходу скрипта будет проверка hwnd идти сначала сверху вниз, дойдя до нижней границы экрана идет сдвиг вправо и начинаем с верхней границы
   FOR($i2 = 0, $i2 < 120) // цикл высоты, итая постоянно обнуляется чтобы не ограничивать наполнение массива только первым рядом hwnd
      $pix = HGET($i2*15, $i1*7) // получаем hwnd в заданной точке
      IF(STRPOS($str, $pix) = 0)
         $str = STRCONCAT($pix, ";", $str)
         LOGWRITE ($pix, " - ", HGETTEXT($pix)) // выводим сам hwnd и имя окна, если доступно.
      END_IF
   END_CYC
END_CYC
HALT

Mind War

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Костылим wndfindarr
« Reply #6 on: March 05, 2021, 03:19:07 PM »
а  шо тут не  так ? чтото с  кодом  ?

Код как код, только слишком объемный, медленный, и алгоритм хромает.
Массив надо выкинуть, вместе с сортировкой и циклом "фильтрации и вывода". Лишних операций, logwrite и переменных, в коде тоже быть не должно. Это в идеале конечно, в "боевом" варианте скрипта. Для "коленочного" варианта и так сойдет.

Перебор массива со сравнением его элементов - очень тяжелая вещь. Строковые функции работают намного быстрее. Например в STRPOS имеется свой собственный цикл для перебора и сравнения, который работает на более низком уровне и по определению более быстрый, чем конструкции FOR + IF.

Вариант со строкой почти в 2 раза быстрее:
Code: (clickermann) [Select]
$str = ""
FOR($i1 = 0, $i1 < 135) // начинаем с цикла ширины (по ходу скрипта будет проверка hwnd идти сначала сверху вниз, дойдя до нижней границы экрана идет сдвиг вправо и начинаем с верхней границы
   FOR($i2 = 0, $i2 < 120) // цикл высоты, итая постоянно обнуляется чтобы не ограничивать наполнение массива только первым рядом hwnd
      $pix = HGET($i2*15, $i1*7) // получаем hwnd в заданной точке
      IF(STRPOS($str, $pix) = 0)
         $str = STRCONCAT($pix, ";", $str)
         LOGWRITE ($pix, " - ", HGETTEXT($pix)) // выводим сам hwnd и имя окна, если доступно.
      END_IF
   END_CYC
END_CYC
HALT

Вооот, вот это я понимаю адекватная критика. Спасибо!

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Костылим wndfindarr
« Reply #7 on: March 14, 2021, 12:41:45 AM »
А где полный архив скачать?
В последнем доступном к скачке - только .exe'шник и хелп, а без файлов настроек и прочего сопутствующего - кликер ловит глюки и не работает(тест - банально wndfindarr не подсвечивает, и не обрабатывает никак. Памагити

Изначально был вопрос, почему не работает wndfindarr. В 4.13.14 как написал Vint такой функции то и вообще небыло. Она же в бете 4.14 только появилась. Вероятно Vint допустил описку. В версии 4.14.003b по крайней мере все пляшет без проблем.

Качай ее тут http://crapware.aidf.org/forum/index.php?topic=356.msg33512#msg33512 , там последняя сборка вместе с патчем.

Quote
v4.14.003 (02.08.19)
+ Интерпретатор:
  + Теперь все процедуры, возвращающие массив, очищают его перед заполнением
  + Добавлены поддержка внешнего препроцессора и директива #preprocessor
  + Добавлены инструкции:
    + CODE
    + FREADDATA
    + FWRITEDATA
    + FDELETE
    + FCOPY
    + FCREATE
    + FEXISTS
    + FSIZE
    + WNDFINDARR
    + CONTRAST
    + LOGWRITEC (PRINTC)
    + CALLARR
    + ARRCONCAT

« Last Edit: March 14, 2021, 12:57:51 AM by dramster »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Костылим wndfindarr
« Reply #8 on: March 15, 2021, 09:16:18 AM »
Я всего лишь написал что экзешник от 14 версии кинуть к остальным файлам от 13-й. Ведь вопрос был в запуске 14 версии.
Что там человек себе придумал я без понятия, про wndfindarr я вообще ничего не отвечал, я думал это просто пример из 14 версии для проверки работы.