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

3 страниц V  1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Screen Scanner, аналог findcolor и findimage
Zeleax
сообщение 2.5.2011, 14:55
Сообщение #1


*********

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



Screen Colors Scanner (cscan.exe)- аналог findcolor (в UOPilot).
Внимание! Начиная с версии UOPilot 2.21.1 почти все возможности ScreenScanner реализованы в обновленных функциях пилота findcolor и findimage. Поэтому рекомендуется пользоваться стандартными функциями!

сайт
Скачать с iFolder
Для работы требуется установленная на компьютере библиотека Microsoft .Net Framework 3.5 (ссылки есть на странице загрузки программы).

Программа командной строки (нет окна, нет консоли) ищет на экране пиксели цветов в указанных диапазонах или получает другую информацию и помещает результаты поиска в массив %arr и переменные #a, $a используя файл или буфер обмена для обмена данными со скриптом.

Гораздо стабильнее программа работает используя файл чем буфер обмена, т.к. часто некоторые программы (PuntoSwitcher, браузеры) используют буфер в своих целях.
Для ускорения работы можно в памяти компьютера создать дополнительный виртуальный жесткий диск, т.н. RAMDisk. И уже на этом диске размещать файл для вывода результатов работы. Мне понравилась эта программа

Если вы всё же решили использовать для передачи данных буфер обмена, то отключайте программы мешающие cscan поместить результат в буфер! (Например, PuntoSwitcher)

Поскольку работа через буфер не всегда стабильна, то возможно в следующих версиях программы эта возможность будет отключена.

Плюсы и минусы по сравнению с findcolor:
Минусы:
- внешняя утилита, а значит не встроена в сам пилот и обмен данными со скриптом происходит не совсем естественным образом (через файл или буфер обмена);
- приходится искусственно задерживать ход выполнения скрипта пока не будут получены данные от программы- см. пример скрипта в конце сообщения (в findcolor скрипт сам "притормаживает" в строке поиска).

Плюсы:
- любые параметры - границы области поиска, шаг поиска. цвета поиска и т.д. можно задавать в виде переменных;
- можно искать прямоугольные изображения из указанных графических файлов;
- можно производить поиск как до первой подходящей точки (ускорение работы), так и до любого указанного количества (параметр -plimit);
- можно указывать один или несколько цветов для поиска через запятую;
- можно указывать цветовые диапазоны для поиска;
- можно указывать отдельные значения и диапазоны цветовых RGB-каналов для поиска;
- можно комбинировать все вышеперечисленные методы поиска через запятую;
- возвращаются координаты найденных точек без всяких дополнительных смещений (как есть);
- можно вместо координат и цветов точек просто получить количество подходящих пикселов (параметр -pcount);
- можно искать координаты области, ограничивающей все пиксели всех указанных цветов (параметр -crop);
- можно изменять шаг поиска по осям X и Y, что реально ускоряет поиск (параметры -dx, -dy) (как и в findcolor);
- можно изменять порядок проверки пикселей по осям X и Y (указывая -dx или -dy меньше нуля);
- можно опускать ненужные параметры - программа примет значения по умолчанию;
- можно менять параметры местами (хотя кому это надо? =)

Программе для работы нужна библиотека Microsoft .Net Framework 3.5! Если у вас она еще не установлена - скачать можно здесь:

Использование:
cscan.exe [<x1> <y1> <x2> <y2> <dx> <dy>] [-pixelscount|-pc <pixelscount>]|[-crop] [-hwindow|-hw <header>] [-NoActivate] -c(<Colors>)|-img (<imagefile>) [-file|-f (<filename>)]

Если задан необязательный параметр -file (-f), то программа будет сохранять результаты в указанный файл, а не через буфер обмена. Имя файла обязательно указывается внутри круглых скобок. Я очень рекомендую использовать эту опцию, т.к. программа будет работать намного стабильнее, чем при использовании буфера обмена.
Пример:
cscan.exe -x1=10 -y1=20 -x2=1000 -y2=600 -dx=1 -dy=1 -c=(255) -f=( d:\1.txt )

-x1, -y1 - координаты левого верхнего угла области на экране, где искать (=0, если не заданы).
-x2, -y2 - координаты правого нижнего угла области на экране, где искать (= правой и нижней границе экрана, если не заданы)
Если координаты области поиска не указаны, то проверяется весь экран.
-dx, -dy - шаг поиска (=1 по умолчанию)
Пример:
cscan.exe -x1=10 -y1=20 -x2=1000 -y2=600 -dx=1 -dy=1 -c=(255)

Кстати, префиксы параметров -x1, -y1, -x2, -y2, -dx, -dy можно не писать, если значения параметров следуют строго по порядку друг за другом
Пример:
cscan.exe 10 20 1000 600 1 1 -c=(255)
cscan.exe 10 20 1000 600 -c=(255)
cscan.exe -x2=1000 -y2=600 -c=(255) - здесь x1 и y1 равны 0 по умолчанию

Вместо координаты правого нижнего угла с параметрами -x2 -y2 можно задать ширину и высоту области поиска с помощью параметров -w -h
Пример:
cscan.exe 10 20 -w=500 -h=5 -c=(255)

В параметре -hw (-hwindow) можно задать десятичный handle окна, в котором будет производиться поиск (т.н. "поиск в относительных координатах").
Например:
Код
move 600, 500 abs // перемещаем мышку в указанную точку на экране
set #handle windowfromcursor // получаем handle окна под курсором мыши
set workwindow #handle // привязываем пилот к указанному окну (если нужно)

set #lifeLiveC 204 // задаем цвет для поиска
// выполняем поиск в заданной области окна указанного с помощью #handle
set $cscanparam 270, 40 -w=100 -h=300 -hw= #handle -c( #lifeLiveC )
gosub cscan
if #a > 0
   set #persLifeX %arr [1 1] // начало полоски жизни перса
   set #lifeY %arr [1 2] // полоска жизни
   msg  Координаты полоски жизни в окне: #persLifeX #lifeY
else
   msg Ошибка! не найдена полоска жизни перса!
   stop_script
end_if


-plimit или -pl - число найденных пикселей, после которых поиск прерывается (= 1 по умолчанию; если нужны все пиксели, то ставьте = 0)
Пример:
cscan.exe 10 20 -w=500 -h=5 -c=(255) - вернет только первый подходящий пиксель
cscan.exe 10 20 -w=500 -h=5 -pl=0 -c=(255) - вернет все подходящие пиксели
cscan.exe 10 20 -w=500 -h=5 -pl=2 -c=(255) - вернет первые 2 подходящих пикселя

-pcount или -pc - если указан этот параметр, то считается число подходящих пикселей, а координаты точек и их цвета не возвращаются (по умолчанию отключен). Число найденных пикселей возвращается в переменных #a и $a. Если число пикселей для поиска не задано, то ищутся все подходящие по цвету (с версии 1.3.0).
Пример:
cscan.exe -pc -c=(255) - вернет число пикселей красного цвета (цвет = 255) на всём экране

Знаки 'равно', 'запятая', 'пробел' считаются равнозначными разделителями, поэтому их можно ставить там где вам удобно для читабельности текста

Примеры:
cscan.exe 10 20 1000 600 1 1 -pc=0 -c=(255)
cscan.exe -x1=10 -y1=20 -x2=1000 -y2=600 -dx=1 -dy=1 -c=(255)
cscan.exe -x1 10 -y1 20 -x2 1000 -y2 600 -dx 1 -dy 1 -c=(100, 200-300, R(255), R(90-100)+G(0-10)+B(250-255))
cscan.exe -c (6437673)

(<Colors>) (всегда в круглых скобках!) могут быть:
один или больше цветов:
100, 200, 300

один или больше диапазонов цветов:
100-200, 1100-2000

RGB цвета заданные отдельными каналами. Канал может быть задан одним значением или одним диапазоном.
G(255) (ищутся пиксели у которых значение канала Green равно 255. Значения каналов Red и Blue не проверяются).
R(200-255)+B(0) (ищутся пиксели у которых значение канала Red находится в диапазоне (200-255) и в то же время значение канала Blue равно 0. Значение канала Green не проверяется).

сложный вариант указания цветов:
100, 200-300, R(255), R(90-100)+G(0-10)+B(250-255)

Результаты работы программы в буфере обмена (между значениями символ табуляции):
<x1> <y1> <десятичный цвет1>
<x2> <y2> <десятичный цвет2>
endcscan
...

Если подходящих пикселей не найдено, то результат будет (через табуляцию):
-1000 -1000 -1000
endcscan

Если просто искали пиксели по цвету и их нашлось 12 штук, то результат будет (через табуляцию):
12 -2000 -2000
endcscan

Параметр -crop используется, если нужно найти координаты области, которая ограничивает все пиксели указанных цветов. Если параметр -plimit не задан, то учитываются все пиксели всех указанных цветов.
261, 736 287, 747 -c( b(100-255)+r(0-80), 240, b(90) ) -f( d:\1.txt ) -crop

Результат: левый верхний и правый нижний углы ограничивающей области и код-признак результата (-3110 левый верхний угол найденной области, -3120 правый нижний угол):
268 739 -3110
280 745 -3120
endcscan

Если указан параметр -img (имя_графического_файла), то вместо поиска цветов будет выполнен поиск прямоугольного изображения, находящегося в указанном графическом файле. Имя файла обязательно указывать в круглых скобках. Поддерживаются только раширения bmp и png (форматы без потери качества). Значение шага dx и dy в данном случае игнорируется (автоматически устанавливается в 1. Поиск производится в указанной области экрана или окна сверху-вниз, слева-направо).
Пример:
Код

// выполняем поиск на всем экране (по умолчанию)
set $cscanparam  -img=( g:\molnija.png )
gosub cscan
if #a > 0
   msg Заклинание Молния в координатах: %arr [1 1] , %arr [1 2] . Цвет: %arr [1 3]
else
   msg Заклинание Молния не найдено!
end_if


Результат будет содержать координату пикселя левого верхнего угла найденного изображения и цвет этого пикселя.
333 598 4608127
endcscan

Если изображение не найдено, то как и в случае с поиском цветов результат будет
-1000 -1000 -1000
endcscan

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

-na (-NoActivate) используется, если не нужно активизировать окно заданное хендлом при снятии цвета. Если указанное окно закрыто другими окнами, то результат поиска будет неверным. Используйте этот параметр на своё усмотрение. По умолчанию он отключен.

Принцип работы:
С экрана делается снимок указанной области.
Программа ищет на этом снимке пиксели по первому условию поиска цвета. если цвет не найден, то программа ищет в этой области по второму условию и т.д. То есть условия поиска цвета желательно указывать в порядке убывания вероятности их появления на экране.
Если по окончанию проверки первого условия цвета был найдены подходящие пиксели (хотя бы один), то остальные условия уже не проверяются. При подсчете общего числа пикселей или определении ограничивающей области пиксели считаются по всем заданным цветам.

Если dx>=0, то программа проходит пиксели слева направо, иначе - справа налево.
Если dy>=0, то программа проходит по строкам сверху вниз, иначе - снизу вверх.
В любом случае программа проходит по пикселам одной строки, а затем переходит к другой.

Условия влияющие на скорость поиска:
- чем меньше область поиска, тем быстрее
- чем больше шаг (dx, dy), тем быстрее
- чем меньше подходящих пикселей нужно найти, тем быстрее (1 пиксель по умолчанию)
- проверка по условиям в порядке убывания скорости: точный десятичный цвет -> диапазон десятичных цветов -> поиск в RGB цветах -> два точных десятичных цвета -> два диапазона десятичных цветов -> и т.д.

Использование в скрипте Пилота:
Код
// в теле скрипта
set #mycolor 204
set $cscanparam 10 10 1000 150 -c( #mycolor )
gosub cscan
if #a > 0
   msg Полоска жизни перса начинается в координате %arr [1 1] %arr [1 2]
else
   msg Ошибка! не найдена полоска жизни перса!
   stop_script
end_if


В конце скрипта, в области процедур:
Процедура использующая файл в качестве среды обмена - РЕКОМЕНДОВАНО
Код
// Вызов внешней программы поиска цвета CScan- аналога findcolor
// Процедура возвращает в переменных #a и $a число найденных пикселей
// Если поиск выполнялся в режиме возврата координат и #a > 0, то в массиве %arr
// возвращаются координаты и цвета найденных пикселей (каждый пиксель в отдельной строчке)
// Содержимое %arr:
//   x1 y1 color1
//   x2 y2 color2
//   ...
//   endcscan
// Программа записывает промежуточные результаты в файл, указанный в параметре -file
:cscan
set linedelay 10 // устанавливаем задержку между строк скрипта
// запускаем поиск цветов в указанной области

set $a findcolor ( 0, 0 1, 1 1 1 88888888 %arr 2) // обнуляем массив %arr

exec g:\cscan $cscanparam -file= (g:\1.txt)
:waiting2
wait 200 // небольшая задержка...

// считываем значения в массив
load_array %arr g:\1.txt

set #wcscan size ( %arr ) // число строк в файле

if #wcscan < 2
   goto waiting2
end_if
set $a %arr [#wcscan 1] // сохраняем последнее (контрольное) значение

if  ( $a <> endcscan )  // последнее контрольное значение должно быть равно endcscan
   goto waiting2
end_if
set #dcscan #wcscan - 1
set  #zcscan  %arr [#dcscan 3 ] //  последнее число - цвет или если меньше нуля, то признак результата

set #a 0
if  #zcscan <> -1000 // если что-то найдено...
      if  #zcscan = -2000 // общее число найденных пикселей, без координат
         set #a %arr [1 1]
      else
       set #a  #dcscan  // число строк координат с цветами
      end_if
end_if

set $a #a
return // cscan



Процедура, использующая буфер обмена - не рекомендуется!

Код
// Вызов внешней программы поиска цвета CScan- аналога findcolor
// Если программа глючит/вылетает с ошибкой - отключите программы следящие за буфером обмена (Punto Switcher, например)
// Процедура возвращает в переменных #a и $a число найденных пикселей
// Если поиск выполнялся в режиме возврата координат и #a > 0, то в массиве %arr в одной строке
// возвращаются координаты и цвета найденных пикселей:
// Содержимое %arr:  x1 y1 color1 x2 y2 color2 .... endcscan
:cscan
set linedelay 10 // устанавливаем задержку между строк скрипта
// записываем для контроля в буфер обмена слово test
set clipboard test
set $a findcolor ( 0, 0 0, 0 1 1 88888888 %arr 2)  // сбрасываем значение массива %arr
// запускаем поиск цветов в указанной области
exec d:\cscan $cscanparam
:waiting1
// считываем из буфера обмена значения в массив
get clipboard %arr

set #wcscan size (%arr [ 1 ]) - 1 // реальное число столбцов
if #wcscan < 1
   goto waiting1
end_if

set $a %arr [1 #wcscan] // сохраняем последнее (непустое) значение

if  ( $a <> endcscan )  // последнее значение должно быть равно endcscan
    goto waiting1
end_if
set #dcscan #wcscan - 1
set  #zcscan  %arr [1 #dcscan ] //  последнее число - цвет или если меньше нуля, то признак результата

set #a 0
if  #zcscan >= 0 // указан цвет, значит есть список точек
    set #a  #wcscan / 3  // число найденных пикселов
else
    if  #zcscan = -1000 // точки не найдены
       set #a 0
    else
       if  #zcscan = -2000 // число найденных пикселей (только подсчет, без координат)
          set #a %arr [1 1]
           else
                  set #a  #wcscan
       end_if
    end_if
end_if

set $a #a
return // cscan



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


***********

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



Может пригодиться вот такая заначка:
Перевод UOPilot чисел в RGB

set linedelay 0
set #dev 1
if #dev = 1
set logging clear
set logging close
set logging open 1 -6 1024 150
end_if

// Скрипт предназначен для перевода числового значения цвета
// из формата UOPilot в читабельный вид.
// Поместите в переменную #decToRGBcount исходный цвет.
// Результат будет содержаться в массиве %RGB
// %RGB [ 1 ] - красный, %RGB [ 2 ] - зеленый, %RGB [ 3 ] - синий.

set #decToRGBcount 8129792

gosub DecToRGB
set logging %RGB [ 1 ] %RGB [ 2 ] %RGB [ 3 ] // УБРАТЬ, ЕСЛИ НЕ НУЖЕН ВЫВОД В ЛОГ.

stop_script

:DecToRGB
for #nRGBtemp 1 6 1
set %RGBTemp [ #nRGBtemp ] #decToRGBcount - ( #decToRGBcount / 16 * 16)
set #decToRGBcount #decToRGBcount / 16
end_for

set %RGB [ 1 ] %RGBTemp [ 2 ] * 16 + %RGBTemp [ 1 ]
set %RGB [ 2 ] %RGBTemp [ 4 ] * 16 + %RGBTemp [ 3 ]
set %RGB [ 3 ] %RGBTemp [ 6 ] * 16 + %RGBTemp [ 5 ]
return


Сообщение отредактировал DarkMaster - 2.5.2011, 19:53


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


*********

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



А для cscan числа сразу указываются в UOPilot формате )
В RGB есть смысл указывать только диапазоны. Конкретный цвет лучше указывать точным десятичным значением (для максимальной скорости поиска)


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


***********

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



Ну я для диапазонов когда-то давно и делал(точнее задавал погрешность). В пилотовском виде диапазоны задавать это ппц...

Сообщение отредактировал DarkMaster - 2.5.2011, 19:54


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


*********

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



Цитата(DarkMaster @ 2.5.2011, 18:51) *

Ну я для диапазонов когда-то давно и делал(точнее задавал погрешность). В пилотовском виде диапазоны задавать это ппц...

1) ну так скорость работы скрипта меньше скорости работы exe
2) почему диапазоны задавать это ппц? особенно в привязке к RGB... P.S. в ucs тоже оптимальные диапазоны подбираются, но еще не обкатывал в привязке с cscan


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


*********

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



Обновил до 1.0.1 - изменил вывод результатов, если ничего не было найдено


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


***********

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



Цитата
1) ну так скорость работы скрипта меньше скорости работы exe
2) почему диапазоны задавать это ппц? особенно в привязке к RGB... P.S. в ucs тоже оптимальные диапазоны подбираются, но еще не обкатывал в привязке с cscan

Ты меня не понял. Я имел ввиду, что числами типа "6437673" диапазон задавать очень не удобно, т.к. не представляешь реальный цвет. Для перевода в РГБ когда-то написал мини-скрипт, который может пригодиться при использовании твоей проги.


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


*********

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



Цитата(DarkMaster @ 3.5.2011, 5:10) *

Ты меня не понял. Я имел ввиду, что числами типа "6437673" диапазон задавать очень не удобно, т.к. не представляешь реальный цвет. Для перевода в РГБ когда-то написал мини-скрипт, который может пригодиться при использовании твоей проги.

Согласен, десятичные цвета не очень наглядные.

З.Ы.: Исправил пару ошибок. Обновил до версии cscan 1.0.2
Исправленные ошибки:
- Ранее проверка шла по столбцам. Сейчас сделано как и было заявлено - по строкам.
- Теперь действительно проверяется область начиная от 1 пикселя ширины или высоты

Известные баги последней версии:
- программа нормально работает, если не указывать область поиска


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


*********

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



cscan 1.0.4
- исправлена ошибка с указанием области поиска

Известные баги:
- иногда Windows блокирует работу с буфером обмена, что вызывает закрытие программы (программа не может записать результат в буфер обмена)


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


*********

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



DarkMaster
чего то глючит работа с буфером обмена. А другой способ передать нормально данные не придумал (


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


***********

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



А глючит на каком этапе? Винда не дает твоей проге записать результат в буфер?


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


*********

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



Иногда винда не дает (вроде), но чаще пилот не может прочитать данные из буфера - вываливается с ошибкой.
Вот скрипт на котором я тестирую. Попробуй тут поставить значение для пикселя, чтоб 100% находился (я у себя привязал к точке на панели задач). Если этот скрипт запускать несколько раз подряд - пилот начинает вываливаться с ошибкой на строке get clipboard %a
Код
// Скрипт в UOPilot
set linedelay 10 // устанавливаем задержку между строк скрипта
// записываем для контроля в буфер обмена слово test
set clipboard test
// запускаем поиск цветов в указанной области
exec d:\cscan 100 600 200 800 -c (R(206)+G(84))
:waiting1
// считываем из буфера обмена значения в массив
get clipboard %a
// сохраняем в #w число столбцов в 1-й строке массива %a
set #w size (%a [1])
if  #w <  3 // если в первой строке массива менее 3-х значений, значит результата всё еще нет- возвращаемся назад
   goto waiting1
end_if
// в %a результаты поиска
get clipboard $a
msg $a

end_script


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


*********

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



Вобщем выложил версию 1.0.7
Вроде бы достаточно стабильна. Хотя если в вышеприведенном скрипте часто тыкать на запуск скрипта, тоже иногда ошибка попадается, но редко )


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


***********

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



я сейчас с вражеского ноута, к тому же тут вин7, который я вижу первый раз, а мне с машиной надо разобраться. Потестирую ближе к вечеру дома. В целом по алгоритму несколько советов:
1) Сделай помимо 3 цветов добавление в начало буфера флаг поступившей информации. Если сравнивать по количеству элеменов, то случайно скопированный текст может привести к не желательным последствиям.
2) Неплохо бы, чтобы прога дожидалась успешного захвата пилотом буфера. Т.е. примерно так должно выглядеть:

Прога в буфер: searchcomplite x y color
Прога входит в режим ожидания
Пилот считывает буфер обнаружив флаг searchcomplite
Пилот в буфер: importcomplite
Прога задетектила в буфере изменеие:
if буфер=importcomplite
завершение работы проги
else
перезапись в буфер полученных данных
end_if

Буфер вещь не надежная и эта схема может избавить от многих проблем имхо

3) По поводу самой проверки рекомендую сделать двойную ибо уже не раз напарывался на непонятные срабатывания if'ов. Делал обычно так:
Код
set linedelay 10
set clipboard test
exec d:\cscan 100 600 200 800 -c (R(206)+G(84))
:waiting1
get clipboard %a
set #w size (%a [1])
while #w <  3 // если в первой строке массива менее 3-х значений, значит результата всё еще нет- возвращаемся назад
    wait 100
    get clipboard %a
    set #w size (%a [1])
end_while
if  #w <  3 // если в первой строке массива менее 3-х значений, значит результата всё еще нет- возвращаемся назад
   goto waiting1
end_if
get clipboard $a
msg $a

end_script


Сообщение отредактировал DarkMaster - 3.5.2011, 13:48


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


*********

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



DarkMaster
надо будет подумать... Просто не хотелось дополнительно усложнять работу скрипта...

Кстати, придумал как лучше прикрутить cscan к скрипту в реальной ситуации - поменял код в первом посте темы. Так же и себе в скрипте ставлю- пока удобно )


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


***********

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



не спорю не самый легко воспринимаемый вариант предложил, но надежность буфера действительно слабая, тем более что все больше программок используют его.
Возможно имеет смысл сделать доп ключ для активации алгоритма проверок считывания с буфера. А вот флаг searchcomplite, мне кажется, будет уместен в любом случае - он как раз упростит.

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


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


*********

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



Флаг штука хорошая, но пока не спасает...
Проковырялся некоторое время над прикруткой программы- так нормально пока и не получается. Даже тот пример, который в 1-м посте- не работает при наличии несколько подходящих пикселей - не могу понять почему. Что-то всё-таки с буфером связано (чтение/запись). Пока возьму тайм-аут, может что придумается


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


*********

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



cscan 1.0.8
Уже почти замечательно )
Оказывается PuntoSwitcher блокировал буфер обмена. После его полного отключения всё заработало.

Немного изменилось описание проги в 1-м посте:
- поменялось смысловое значение параметра -pcount. При наличии этого параметра программа вернет только количество подходящих пикселей вместо их полного списка. Это намного ускорит передачу через буфер обмена, да и в скрипте писанины меньше.
- добавился параметр -plimit (раньше назывался по-другому)
- добавил в конце первого поста рабочий код процедуры поиска для пилота

в 22-40 по Москве подправил процедуру в конце 1-го поста. Обкатываю в полевых условиях - пока нормально. Но думаю, что баги всегда найдутся =)


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


****

Apprentice
Сообщений: 103
Регистрация: 12.3.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.512
Возраст: 25



Давно я не заходил сюды, и вот увидел сиё чудо, что меня очень порадовало, и сразу же огорчило, что программа читает только по абсолютным координатам, неужели никак не сделать чтобы можно было задавать через относительные координаты ? Если для одномониторных систем абсолютные не проблема, то для двух мониторных, когда нужное окно то на одном монике то на другом, использование абсолютных координат невозможно.

з.ы. Пожелания для зелуса. Осталось только написать которая бы умела читать и выполнять пилотные скрипты и у нас выйдет новый более стабильный, незаброшеный кликер. а 2/3 остальных фунций ты уже продублировал в своих программках, осталось их объединить в одно целое, я жду когда придет этот день.

з.ы.ы. Советы по тестированию, обязательно погоняй свою прогру при максимально загруженом процессоре, большинтсво ошибок в пилоте, возникает, когда процессор, сильно загружен, надеюсь твоя програ этим не страдает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.5.2011, 7:17
Сообщение #20


***********

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



Не так давно была написана еще одна прога, которая вытягивает информацию об окне, в т.ч. координаты. Ты можешь брать координаты окна, прибавлять к ним относительные и уже их использовать в скрине.


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

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

 

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