Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: ee33e on December 13, 2016, 11:18:49 PM
-
Здравствуйте! Помогите, пожалуйста, как скопированные в буфер цифры распознать в определенной области? Шрифт Calibri, поделитесь кто-нибудь скриптом-распознавателем самым простым!))
-
В вашей программе нельзя вставлять из буфера?
Там возможно занесение записей только по одной?
-
Получается первый столбик надо контролировать, чтобы вовремя переключиться между карточками в программе, вторую колонку надо копировать в буфер, чтобы найти такой же номер в программе, но в ней только распознавание поможет, так как там нельзя скопировать сразу в нужную ячейку или выделить текст для распознания, там сначала нужно нажать на выплывающее меню, затем в нем найти такой же номер, создать строку, путем нажатия на этот номер, и уже в появившейся строке в двух колонках рядом скопировать данные из ексель (двух колонок правых).
вот как я вижу данный процесс, во второй колонке копируем номер и находим этот номер в программе (пара кликов для создания карточки и открывания всплывающего меню, далее скрин, чтобы найти номер из буфера, если нет номера, то прокручиваем список, опять делаем скрин, находим номер, нажимаем на него, и появляется строка с тремя колонками в одной этот найденный номер в две остальные просто копируем данные из двух правых колонок в ексель) надеюсь сейчас понятен мой ход мысли) если тут можно без распознавания обойтись было бы отлично) но пока что-то не придумали как(( Спасибо!
-
В вашей программе нельзя вставлять из буфера?
Там возможно занесение записей только по одной?
можно вставлять, но только не номер, его нужно выбрать из всплывающего меню, в каждой карточке несколько номеров, в ексель это вторая колонка, первая это номер карточки, а третья и четвертая колонки в ексель эти данные как раз можно скопировать и просто вставить в соответствующие ячейки в программе, но только после того как мы выберем номер из вспывающего меню. Сейчас прикреплю скрин как это выглядит, правда часть потерта, личная информация сори))
С кликами и выбором меню, копированием и всякое такое это я разбераюсь уже, а вот как сюда прикрутить распознавание, чтобы выбрать в меню такое же число что и в буфере, вот в чем не могу разобраться, помогите!)
Ещё мне подсказали вместо ексель работать с txt, в котором табами разделены данные, но это мне тоже сложно освоить сразу, так что можете к моему неэффективному методу сначала подсказать команды, а затем к варианту с txt)))
-
Сдесь самое сложное, искать в выподающем списке твое число.
Надо учитывать сглаживание шрифтов в системе. При каждом открытии окна тексты смазываются чуть иначе. Но сглаживание можно отключить.
Откуда мы возьмем картинку? В буфере будет текст. Если бы у нас была картинка то без проблем можно было бы крутить и искать в цикле.
Распознавать? Мы имеем дело не с статичным текстом а с подвижным списком. Это нужно применить скрипт распознавания цифр, медленно прокручивать список и сравнивать полученное с нашим числом.
Все это как то сложно.
-
Да, да, да.
Основная проблема даже не в сглаживании. Вот этот выпадающий список нужно точно позиционировать.
Распознавать получится только по одной строке, ну это не так страшно.
Учесть перелистывание страницами и то, как будет проходить это пролистывание. Вон там нижняя строка не полная. Если сделать PageDown она где окажется? Вверху полная или такая же обрезанная?
Вот давно написанное распознавание чисел
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
В цикле задаётся область с очередным числом. Распознаётся. Сравнивается с числом скопированным из 1 колонки.
Кстати просто копировать колонки 3, 4 тоже не выйдет. Там разделители запятые, нужно менять на точки.
Txt пока не нужно, основное замедление на распознавании. Пока можно копировать напрямую из экселя.
В той программе в которую заносим (слева) закрашены поля... Может в эти поля можно вставить номер? И что можно вписать вместо выпадения списка? Там вижу карандашик, значит вписать можно. Если туда вписывается наименование соответствующее номеру, которое мы и выбираем, может стоит задать массив номер-текстназвание и получив номер из экселя находить в массиве его название и вбивать (вставлять) в программу. Этим избавится совсем от выпадающего списка.
-
вот вы наркоманы человек хочет определять скопированные в буфер цифры
а вы все с тем старым скриптом на распознание, который к каждому отдельному случаю нужно сидеть и калибровать три часа
-
Ничего они не наркоманы, не наговаривай на хороших людей!) так и планировалось делать!(
В общем есть идея, как уйти от распознавания!!
Нужно определить номер, который копируется в буфер из экселя, далее под каждый номер написать свой порядок действий и всё!
Номера в программе всплывают по тем же координатам каждый раз, прокрутка с одной скоростью, так что дело тонкой настройки и не промахнуться! А далее как выше уже описывалось. Там всего 120 номеров( да все-равно быстрее, чем вручную тыкателем работать и интересней) остается подсказать какие команды использовать чтобы сделать
IF "такой-то номер в буфере, делать то"
IF "такой-то номер делать другое то"
Или вообще какие-то команды использовать другие, чтобы сразу понимать на какую строчку в скрипте переходить!! сделаю первый номер, остальные уже автоматом пойдут, координаты исправлять, да прокрутку мышью) так что 120 уже не кажется таким большим числом!
Кто поможет с такой упрощенной задачей!?) проще же?)
-
вот вы наркоманы человек хочет определять скопированные в буфер цифры
Во первых никто не собирается определять цифры в буфере, почитай сообщения. Определять нужно было в спец программе где есть только выпадающий список без возможности копирования.
а вы все с тем старым скриптом на распознание, который к каждому отдельному случаю нужно сидеть и калибровать три часа
старым, не старым... сделай новее.
Можно и скрипт из трёх строк "калибровать" три часа. И некоторые умудряются.
Если шрифт стабильный подготовка займёт 10-15 мин. На сложных случаях, да можно час провозится.
Но сложный на то и сложный. Тут некоторые одну картинку ищут неделями. Вот блин не приувеличиваю.
-
В общем есть идея, как уйти от распознавания!!
Нужно определить номер, который копируется в буфер из экселя, далее под каждый номер написать свой порядок действий и всё!
Номера в программе всплывают по тем же координатам каждый раз, прокрутка с одной скоростью, так что дело тонкой настройки и не промахнуться! А далее как выше уже описывалось. Там всего 120 номеров( да все-равно быстрее, чем вручную тыкателем работать и интересней) остается подсказать какие команды использовать чтобы сделать
IF "такой-то номер в буфере, делать то"
IF "такой-то номер делать другое то"
Соответствие строкам задать не сложно
// высота строки 20
// строк на экране 12
// координаты первой строки выпадающего списка
$stx = 100
$sty = 10
// заносим номера подряд как они расположены в выпадающем списке
STRSEPARATE("184,203,206,207,230,231,301,302,303,304,308,316", ",", $data)
SUB(get_index, $nn)
$index = -1
FOR($j=0, $j < ARRSIZE($data))
IF($nn = $data[$j])
$index = $j
$j = ARRSIZE($data) + 100
END_IF
END_CYC
END_SUB
FOR($stroke=0, $stroke < nnn) // перебираем строки
// ...
// копируем число
$num = INT(FROMCLIP()) // число из буфера
get_index($num)
IF($index ! -1)
LCLICK(x,y)// открываем выпадающий список
WAITMS(500)
$page = INT($index / 12)
FOR($p=0, $p < $page)
KEYPRESS(#PAGEDOWN) // перелистываем страницу $page раз
WAITMS(300)
END_CYC
$loc_index = $index - ($page * 12)
// клик по строке
LCLICK($stx, $sty + ($loc_index*20))
WAITMS(300)
// дальше делаем что нужно
ELSE
LOGWRITE("Такое число не задано ", $num)
END_IF
END_CYC
HALT
-
Вот спасибо, добрый человек! Половину команд не понимаю, но начну с практики и справки, надеюсь сразу же соображу что к чему! Завтра начну так как в поездке(
kiril, переводить данные из одного формата в другой, как раз работа машин, а человек должен мыслить творчески)))))
Ну вот, в общем, ничегошеньки не понятно((
Можно каждую команду кратко пояснить, пожалуйста! get_index - что значит?
Может какие-то более простые команды есть для таких как я, чайников?))
Вот так не получилось, где-то что-то упустили, даже не выпадает меню в программе(((((:
// высота строки 20
// строк на экране 37
// координаты первой строки выпадающего списка
$stx = 164
$sty = 292
// заносим номера подряд как они расположены в выпадающем списке
STRSEPARATE("101,118,123,125,126,132,138,140,143,146,150,152,155,156,158,159,164,166,168,170,175,184,203,206,207,230,231,301,302,303,304,308,316,317,322,328,330,333,337,342,344,348,405,410,415,416,501,503,514,516,602,616,620,621,627,703,827,869,893,931,1023,1042,1052,1061,1071,1078,1119,1206,1210,1211,1215,1240,1310,1325,1332,1401,1512,1534,1555,1716,1728,1838,1863,1886,2001,2026,2731,2732,2735,2744,2750,2752,2754,2781,2902,2904,2907,2908,2909,2917,2922,2930,2934,2936,2969,2970,2978,2980,2989,2990,2994,3130,3132,3239,3714,3722,3926,100042,100133,$data)
SUB(get_index, $nn)
$index = -1
FOR($j=0, $j < ARRSIZE($data))
IF($nn = $data[$j])
$index = $j
$j = ARRSIZE($data) + 100
END_IF
END_CYC
END_SUB
FOR($stroke=0, $stroke < 100133) // перебираем строки, тут нужно что-то менять?
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(200)
LUP(1413,14)
waitms(200)
KEYDOWN(17) // копирование номера,
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(39) // заранее переходим на след ячейку в строке
WAITMS(15)
KEYUP(39)
WAITMS(15)
$num = INT(FROMCLIP()) // число из буфера
get_index($num)
IF($index ! -1)
LCLICK(388,233) // открываем выпадающий список - поставлены координаты
WAITMS(500)
$page = INT($index / 37) // тут 12 было по числу строк, если строк теперь 37, правильно?
FOR($p=0, $p < $page)
KEYPRESS(#PAGEDOWN) // перелистываем страницу $page раз
WAITMS(300)
END_CYC
$loc_index = $index - ($page * 37)
// клик по строке
LCLICK($stx, $sty + ($loc_index*20))
WAITMS(300)
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(200)
LUP(1413,14)
waitms(200)
KEYDOWN(17) // копирование
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(39) // заранее переходим на след ячейку в строке
WAITMS(15)
KEYUP(39)
WAITMS(15)
LDOWN(500,233) // выбираем куда вставлять данные
WAITMS(100)
LUP(500,233)
WAITMS(100)
KEYDOWN(17) // вставляем данные
WAITMS(15)
KEYDOWN(86)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(86)
WAITMS(15)
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(200)
LUP(1413,14)
waitms(200)
KEYDOWN(17) // копирование
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(40) // переходим на след номер
WAITMS(15)
KEYUP(40)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
LDOWN(500,233) // выбираем куда вставлять данные
WAITMS(100)
LUP(500,233)
WAITMS(100)
KEYDOWN(17) // вставляем данные
WAITMS(15)
KEYDOWN(86)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(86)
WAITMS(15)
KEYDOWN(13) // сохраняем строчку с введеными данными
WAITMS(15)
KEYDOWN(13)
WAITMS(15)
// проверка необходимости перейти к следующей карточке
GETSCREEN(1052,925, 255)
IF_PIXEL_IN(1052,925, 255)
LDOWN(13,962) // переходим на след карточку
WAITMS(300)
LUP(13,962)
WAITMS(800)
KEYDOWN(40)
WAITMS(15)
KEYUP(40)
WAITMS(15)
END_IF // нужно ещё раз чтобы закрыть IF_PIXE?
END_IF
ELSE
LOGWRITE("Такое число не задано ", $num)
END_IF
END_CYC
HALT
-
Хахаха, прям мастер стеба, тебя тут для этого и держат? Лучше помог бы, или не знаешь как?
-
Не верный синтаксис:
STRSEPARATE - в начале должна идти строка с разделителями, потом сам символ разделитель и в конце имя массива.
GETSCREEN(1052,925, 255) - ограничить область снимка можно но там должны быть 4 числа координат
IF_PIXEL_IN(1052,925, 255) - эта функция ищет пиксел в области, должно быть 4 числа координат, потом цвета через запятую.
Лишние строки
ELSE
LOGWRITE("Такое число не задано ", $num)
END_IF
Верный код
// высота строки 20
// строк на экране 37
// координаты первой строки выпадающего списка
$stx = 164
$sty = 292
// заносим номера подряд как они расположены в выпадающем списке
STRSEPARATE("101,118,123,125,126,132,138,140,143,146,150,152,155,156,158,159,164,166,168,170,175,184,203,206,207,230,231,301,302,303,304,308,316,317,322,328,330,333,337,342,344,348,405,410,415,416,501,503,514,516,602,616,620,621,627,703,827,869,893,931,1023,1042,1052,1061,1071,1078,1119,1206,1210,1211,1215,1240,1310,1325,1332,1401,1512,1534,1555,1716,1728,1838,1863,1886,2001,2026,2731,2732,2735,2744,2750,2752,2754,2781,2902,2904,2907,2908,2909,2917,2922,2930,2934,2936,2969,2970,2978,2980,2989,2990,2994,3130,3132,3239,3714,3722,3926,100042,100133", ",", $data)
SUB(get_index, $nn)
$index = -1
FOR($j=0, $j < ARRSIZE($data))
IF($nn = $data[$j])
$index = $j
$j = ARRSIZE($data) + 100
END_IF
END_CYC
END_SUB
FOR($stroke=0, $stroke < 100133) // перебираем строки, тут нужно что-то менять?
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(200)
LUP(1413,14)
waitms(200)
KEYDOWN(17) // копирование номера,
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(39) // заранее переходим на след ячейку в строке
WAITMS(15)
KEYUP(39)
WAITMS(15)
$num = INT(FROMCLIP()) // число из буфера
get_index($num)
IF($index ! -1)
LCLICK(388,233) // открываем выпадающий список - поставлены координаты
WAITMS(500)
$page = INT($index / 37) // тут 12 было по числу строк, если строк теперь 37, правильно?
FOR($p=0, $p < $page)
KEYPRESS(#PAGEDOWN) // перелистываем страницу $page раз
WAITMS(300)
END_CYC
$loc_index = $index - ($page * 37)
// клик по строке
LCLICK($stx, $sty + ($loc_index*20))
WAITMS(300)
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(200)
LUP(1413,14)
waitms(200)
KEYDOWN(17) // копирование
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(39) // заранее переходим на след ячейку в строке
WAITMS(15)
KEYUP(39)
WAITMS(15)
LDOWN(500,233) // выбираем куда вставлять данные
WAITMS(100)
LUP(500,233)
WAITMS(100)
KEYDOWN(17) // вставляем данные
WAITMS(15)
KEYDOWN(86)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(86)
WAITMS(15)
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(200)
LUP(1413,14)
waitms(200)
KEYDOWN(17) // копирование
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(40) // переходим на след номер
WAITMS(15)
KEYUP(40)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
LDOWN(500,233) // выбираем куда вставлять данные
WAITMS(100)
LUP(500,233)
WAITMS(100)
KEYDOWN(17) // вставляем данные
WAITMS(15)
KEYDOWN(86)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(86)
WAITMS(15)
KEYDOWN(13) // сохраняем строчку с введеными данными
WAITMS(15)
KEYDOWN(13)
WAITMS(15)
// проверка необходимости перейти к следующей карточке
GETSCREEN
IF_PIXEL_IN(1052,925,1052,925, 255)
LDOWN(13,962) // переходим на след карточку
WAITMS(300)
LUP(13,962)
WAITMS(800)
KEYDOWN(40)
WAITMS(15)
KEYUP(40)
WAITMS(15)
END_IF // нужно ещё раз чтобы закрыть IF_PIXE?
END_IF
END_CYC
HALT
-
Разобрались с проблемой внесения информации в буфер, если копировать саму ячейку кликер не понимает, дописали редактирование ячейки, потом выделение в ней цифр и уже потом копирование!
Пошла работа с открывающимся меню!
Получается сейчас, если листать не надо, то все верно вбивается! А если начинает перелистывать, то другой номер нажимает(((
Может при необходимости листать вниз можно добавить сначала двойное нажатие pagedown?
Хочу показать как работает открывающееся меню, нажимаю мышкой для открытия, затем клавишу pagedown, и выделение переходит с первой строки на последнюю, и только после второго нажатия pagedown, в меню происходит перелистывание. Получается чтобы полностью дойти до конца списка нужно нажать 5 раз pagedown. Вот как это выглядит:
И не получается перейти на другую карточку если в заданной точке подходящий цвет(((
Как проверить через лог какой он все же цвет определяет и делает ли это?
Вот новый сценарий, немного изменен:
// высота строки 20
// строк на экране 37
// координаты первой строки выпадающего списка
$stx = 343
$sty = 292
// заносим номера подряд как они расположены в выпадающем списке
STRSEPARATE("101,118,123,125,126,132,138,140,143,146,150,152,155,156,158,159,164,166,168,170,175,184,203,206,207,230,231,301,302,303,304,308,316,317,322,328,330,333,337,342,344,348,405,410,415,416,501,503,514,516,602,616,620,621,627,703,827,869,893,931,1023,1042,1052,1061,1071,1078,1119,1206,1210,1211,1215,1240,1310,1325,1332,1401,1512,1534,1555,1716,1728,1838,1863,1886,2001,2026,2731,2732,2735,2744,2750,2752,2754,2781,2902,2904,2907,2908,2909,2917,2922,2930,2934,2936,2969,2970,2978,2980,2989,2990,2994,3130,3132,3239,3714,3722,3926,100042,100133", ",", $data)
SUB(get_index, $nn)
$index = -1
FOR($j=0, $j < ARRSIZE($data))
IF($nn = $data[$j])
$index = $j
$j = ARRSIZE($data) + 100
END_IF
END_CYC
END_SUB
FOR($stroke=0, $stroke < 100134) // перебираем строки
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(500)
LUP(1413,14)
waitms(500)
KEYDOWN(#F2) // редактирование ячейки
WAITMS(15)
KEYUP(#F2)
WAITMS(15)
LDOWN(1115,892) // выделение номера
waitms(100)
LUP(1171,889)
waitms(100)
KEYDOWN(17) // копирование номера
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(#TAB) // заранее переходим на след ячейку в строке
WAITMS(15)
KEYUP(#TAB)
WAITMS(15)
KEYDOWN(#TAB)
WAITMS(15)
KEYUP(#TAB)
WAITMS(15)
$num = INT(FROMCLIP()) // число из буфера
get_index($num)
IF($index ! -1)
LCLICK(321,233) // открываем выпадающий список - поставлены координаты
WAITMS(800)
KEYPRESS(#PAGEUP)
WAITMS(100)
KEYPRESS(#PAGEUP)
WAITMS(100)
KEYPRESS(#PAGEUP)
WAITMS(100)
KEYPRESS(#PAGEUP)
WAITMS(100)
$page = INT($index / 37) // тут 12 было по числу строк, если строк теперь 37, правильно?
FOR($p=0, $p < $page)
KEYPRESS(#PAGEDOWN) // перелистываем страницу $page раз
WAITMS(300)
END_CYC
$loc_index = $index - ($page * 37)
// клик по строке
LCLICK($stx, $sty + ($loc_index*20))
WAITMS(300)
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(500)
LUP(1413,14)
waitms(500)
KEYDOWN(17) // копирование
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(39) // заранее переходим на след ячейку в строке
WAITMS(15)
KEYUP(39)
WAITMS(15)
LDOWN(521,234) // выбираем куда вставлять данные
WAITMS(100)
LUP(660,233)
WAITMS(100)
KEYDOWN(17) // вставляем данные
WAITMS(15)
KEYDOWN(86)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(86)
WAITMS(15)
LDOWN(1413,14) // ... выделяем ексель с уже выбранной ячейкой с номером
waitms(500)
LUP(1413,14)
waitms(500)
KEYDOWN(17) // копирование
WAITMS(15)
KEYDOWN(67)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(67)
WAITMS(15)
KEYDOWN(40) // переходим на след номер
WAITMS(15)
KEYUP(40)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
KEYDOWN(37)
WAITMS(15)
KEYUP(37)
WAITMS(15)
LDOWN(671,233) // выбираем куда вставлять данные
WAITMS(100)
LUP(861,234)
WAITMS(100)
KEYDOWN(17) // вставляем данные
WAITMS(15)
KEYDOWN(86)
WAITMS(15)
KEYUP(17)
WAITMS(15)
KEYUP(86)
WAITMS(15)
KEYDOWN(13) // сохраняем строчку с введеными данными
WAITMS(15)
KEYDOWN(13)
WAITMS(3000)
// проверка необходимости перейти к следующей карточке
GETSCREEN
IF_PIXEL_IN(1059,892,1052,892, 255)
LDOWN(97,144) // переходим на след карточку
WAITMS(100)
LUP(97,144)
WAITMS(100)
KEYDOWN(#TAB)
WAITMS(150)
KEYUP(#TAB)
WAITMS(150)
KEYDOWN(#DOWN)
WAITMS(150)
KEYUP(#DOWN)
WAITMS(2000)
END_IF // нужно ещё раз чтобы закрыть IF_PIXE?
END_IF
END_CYC
HALT
Сейчас получается программа вводит все данные в одну карточку, т.е. проблема со сменой карточек, и ещё проблема с выбором строки в выпадающем меню, не выбирает нужную строку, прикрепил в сообщении в теме гифку как выпадает и прокручивается меню, может там можно в ручном режиме проставлять сколько раз нужно нажать pagedown, вместо определения путем деления количества ячеек на количество строк? Например от такого то числа до такого pagedown не нужен, а от таког числа до такого нажать два раза pagedown.
-
Самому стало интересно и вот написал скрипт для поиска заданного числа на экране как картинку. Код долеко не идеален. Поддерживает от двух чисел.
Рабочий пример в архиве.
Распознавание и поиск заданного числа на экране.
SUB(scan, $num)
$len = STRLEN($num)
FOR($a=1,$a<$len+1)
ARRPUSH($aNum, STRCUT($num, $a, 1))
END_CYC
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, STRCONCAT("Num\", $aNum[0], ".bmp"), -1, 100)
$n = 1
$check = 0
FOR($a=0,($a<ARRSIZE($ARR_SCAN))&($check < 2),2)
$cx = $ARR_SCAN[$a]+5
$cy = $ARR_SCAN[$a+1]
$check = 0
$n2 = 0
WHILE($check = 0)
IF_PICTURE_IN($cx,$cy, $cx+20+$n2,$cy+11, STRCONCAT("Num\", $aNum[$n],".bmp"), -1, 100)
INC($n,1)
$cx = $_return1+5
IF($len = $n)
$check = 2
$x = $ARR_SCAN[$a]
$y = $ARR_SCAN[$a+1]
END_IF
ELSE
$n = 1
$check = 1
END_IF
END_CYC
END_CYC
UNDEFINE($aNum)
UNDEFINE($ARR_SCAN)
END_SUB
scan(67) // вызов подпрограммы с передачей заданного числа
IF($check = 2) // если check равна 2 значит найдено
MOVE($x,$y) // выполняем код
END_IF
WAITMS(500)
scan(1234) // еще поиски
IF($check = 2)
MOVE($x,$y)
END_IF
WAITMS(500)
scan(233434)
IF($check = 2)
MOVE($x,$y)
END_IF
HALT
-
Спасибо за пример! Код для меня слишком сложен, вникать сейчас буду!)
А можно тот код (чуть выше) без распознавания как-то допилить?))) вроде чуть-чуть осталось))) просто я даже в справке таких команд не вижу чтобы понять как добавить недостающую прокрутку и что за глюки с определением цвета(((
-
Прокрутку... пробуй. Кто его знает как там в твоей "секретной" программе.
И не получается перейти на другую карточку если в заданной точке подходящий цвет(((
Как проверить через лог какой он все же цвет определяет и делает ли это?
Цвет в точке
GETSCREEN
LOGWRITE(PXL(X,Y))
Что находит в коде
GETSCREEN
IF_PIXEL_IN(1059,892,1052,892, 255)
LOGWRITE("Найден цвет 255 в координатах: ", $_return1, " / ", $_return2)
// ...
ELSE
LOGWRITE("Цвет НЕ найден")
END_IF
-
ну вот же 163 строка
IF_PIXEL_IN(1059,892,1052,892, 255)
1059 не может быть больше 1052 ! Зона поиска задана не верно.
-
Вот умница, Oraven, переключается все здорово! Большущее спасибо!))
Осталось меню(
Получается при превышении 37 строк автоматически переходит на другую "страницу" (нажимает pagedown)? так? значит при превышении 37 строки нужно дополнительно нажать pagedown, но как это добавить в код не знаю!(
где-то тут я догадываюсь)))
$page = INT($index / 37) // тут 12 было по числу строк, если строк теперь 37, правильно?
FOR($p=0, $p < $page)
KEYPRESS(#PAGEDOWN) // перелистываем страницу $page раз
WAITMS(300)
END_CYC
-
С моим кодом распознавания номера тебе нужен лиш один цикл прокрутки и поиска.
$check = 0
WHILE($check ! 2)
scan($num_excel) // в эту переменную возвращаем номер из Excel
IF($check = 2) // и ищем его в списке
MOVE($x,$y)
ELSE // если не нашли листаем и снова ищем
KEYPRESS(#PAGEDOWN)
WAITMS(300)
END_IF
END_CYC
-
ОООо друзья мои!!! Я стал мегамозг только что в чьем-то представлении, конечно с вашей огромной помощь!
Код корявый (мой уровень)), это как костыли к иномарке))) но блин сам допилил, даже результат уже не важен, главное работает!))
Пришлось разбить на 9 строк, и там надо было сократить количество номеров, ещё вместо pagedown вставил прокрутку три раза, тогда каждая "страница" начиналась с нового номера, как предполагается программой, да и в экселе прокрутка с помощью клавиши pagedown так же работает, а в этой программе все не так))) Ещё и страницы сами не возвращаются, пришлось добавить 11 раз pageup, чтобы, при условии самого последнего номера из списка, вернуться в начало! и все пошло! Задержки до минимума сейчас проверю и можно уходить с коллегой чай с тортом пить или что там у нее)))))
Oraven, твой код супер, но надо долго вникать, чего поздним вечером уже не сделаешь((
Но обязательно опробую и его!, получается картинки я свои любого размера могу заменить, без разницы?
Вот сам код, точнее измененная его часть по перелистыванию списка, если кому интересно, и кто хочет подсказать какими командами можно это дело укоротить, готовьтесь:))))
$num = INT(FROMCLIP()) // число из буфера
get_index($num)
IF($index ! -1)
LCLICK(321,233) // открываем выпадающий список - поставлены координаты
WAITMS(500)
MOVE(509,293)
WAITMS(200)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
$page = INT($index / 9)
FOR($p=0, $p < $page)
WHEELDOWN // перелистываем страницу $page раз
WAITMS(100)
WHEELDOWN
WAITMS(100)
WHEELDOWN
WAITMS(300)
END_CYC
$loc_index = $index - ($page * 9)
-
Давным давно,
в далёкой галактике, придумали циклы
FOR($pu=0, $pu < 11)
KEYDOWN(#PAGEUP)
WAITMS(10)
KEYUP(#PAGEUP)
WAITMS(10)
END_CYC