Что нового

Скрипт кликалка, меняющий поведение от цвета пикселя на заданный период времени.

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Версия AutoIt: v3.3.6.1


Описание:
Написал простейший скрипт:

Код:
$A = 1
For $A = 1 To 5
If PixelGetColor(1097, 681)=0x037CE4 Then MouseClick("primary", 485, 136)
EndIf
If PixelGetColor(1097, 681)=0xFFFFFF Then MouseClick("primary", 1188, 176, 2)
EndIf
$A = $A+1
Next


Он должен работать так:
по координате 1097, 681 проверяется цвет пикселя и если он синий, то двойной клик по 485, 136, если цвет пикселя белый (или просто не синий), то нажатие на 1188, 176. И так 5 раз.

Примечания:
Пробовал разные варианты (без EndIf, с ElseIf, Else) ни как не получается, Помогите, пожалуйста, 2 недели бьюсь уже.
Извините, что не применил тег
Код:
, но он у меня не сработал почему-то
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Код:
For $i = 1 To 5
	If PixelGetColor(1097, 681) = 0x037CE4 Then 
		MouseClick("primary", 485, 136)
	Else
		MouseClick("primary", 1188, 176)
	EndIf
Next


А вообще, $A изменять нельзя, т.к. она используется в цикле.

И еще.

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.






Добавлено:
Сообщение автоматически объединено:

Кайгородов В. Ю. сказал(а):
Извините, что не применил тег
Код:
, но он у меня не сработал почему-то
[/quote]

Как не сработал? Я сейчас поправил твое сообщение.
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

У меня на AutoIt3.3.6.1, ранее был написан успешно работающий скрипт - вот он:
Код:
$A = 1
For $A = 1 To 20000
MouseClick ( 'left', 522, 209 )
Sleep ( '250' )
MouseClick ( 'left', 766, 504 )
Sleep ( '250' )
MouseClick ( 'left', 677, 489 )
Sleep ( '100000' )
$A = $A+1
Next

Я просто хотел его немного усложнить, научить видеть.

Этот код заработал, я его подправил, а как задать не несколько повторов, а работу на заданный интервал времени?
Код:
For $i = 1 To 15
    If PixelGetColor(1169, 556) = 0x0269D0 Then 
        MouseClick("primary", 485, 136, 2)
        Sleep ( '950' )
    Else
        MouseClick("primary", 1233, 184)
        Sleep ( '950' )
    EndIf
$i = $i+1
Next
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Кайгородов В. Ю.
Вот три простых примера для сравнения.
Пример 1
Код:
For $i = 1 To 3
	;..........
    $i = $i+1
	MsgBox(64, "Значение переменной", "$i = " & $i)
Next


Пример 2
Код:
For $i = 1 To 3
	;..........    
	MsgBox(64, "Значение переменной", "$i = " & $i)
Next


Пример 3
Код:
For $i = 1 To 3
	;..........
	Sleep(1000)
	MsgBox(64, "Значение переменной", "$i = " & $i)
Next

Видишь разницу?
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Думаю между примерами 1 и 2 разницы нет (или 2 пример не будет работать, так как нет команды $i = $i+1), а в 3 примере выставлена пауза в 1 секунду между операциями цикла (или 3 пример не будет работать, так как нет команды $i = $i+1).
У меня вообще проблема с синтаксисом при программировании, принцип программы разрабатываю за пару минут, а потом по не скольку дней бьюсь над отладкой и в итоге всё равно не могу понять, в чём изначально была ошибка в синтаксисе программы.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

В том то и дело, что ты думаешь, а надо скопировать примеры, запустить и смотреть.
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Проверил, оказывается команда $i = $i+1 приводит к тому, что выполняется не 1, 2 и 3 фаза цикла, а 2 и 4. Ясно теперь что эта команда лишняя.


Добавлено:
Сообщение автоматически объединено:

Я для того чтобы скрипт работал заданное время делал так: выставлял на скрипт несколько повторов, по секундомеру замерял время, и затем, по пропорции, вычислял сколько повторов надо задать чтобы скрипт работал в течении часа. Или задавал большое кол-во повторов и в нужный момент прерывал работу скрипта.
В справке TimerDiff (), TimerInit() пытался для этого применить, вот код:
Код:
$begin = TimerInit()
If TimerDiff($begin) < 10000 Then 
For $i = 1 To 15
MouseClick ( 'left', 522, 209 )
Sleep ( '1050' )
MouseClick ( 'left', 766, 504 )
Sleep ( '1050' )
MouseClick ( 'left', 677, 489 )
Sleep ( '1050' )
Next
Else
EndIf

Он должен работать так: запускается счётчик миллисекунд TimerInit, затем пока счёт секунд не достиг 5000 выполняется нажатие кнопок (15 повторов), на 4 повторе цикл должен прекратить выполнение, так как время истекло.

А работает так: Делаются все 15 повторов, после чего выполнение прекращается.

Если необходимо могу эту тему закрыть и открыть новую.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

OffTopic:
Новую тему в разделе юмора?

:beer:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Кайгородов В. Ю.
Попробуйте такую конструкцию:
Код:
$begin = TimerInit()
While TimerDiff($begin) < 10000
	;какой-то код
	Sleep(100)
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")

Про While Wend в справке написано.
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Скрипт сделал все 15 повторов, а затем выдал: "Время работы цикла 55257.9587916451 истекло"
Код:
$begin = TimerInit()
While TimerDiff($begin) < 5000
For $i = 1 To 15
MouseClick ( 'left', 522, 209 )
Sleep ( '750' )
MouseClick ( 'left', 766, 504 )
Sleep ( '750' )
MouseClick ( 'left', 677, 489 )
Sleep ( '750' )
Next
Sleep ( '100' )
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")

То-есть цикл до истечения 5000 миллисекунд завершен не был.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Кайгородов В. Ю.
Не понятно что нужно.

Код:
$begin = TimerInit()
While TimerDiff($begin) < 5000
	MouseClick ('left',522,209)
	Sleep (750) 
	MouseClick ('left',766,504)
	Sleep (750) 
	MouseClick ('left',677,489)
	Sleep (750)   
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Спасибо, теперь работает!
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Чуть точнее
Код:
$begin = TimerInit()
While 1
	If TimerDiff($begin) > 5000 Then ExitLoop
	MouseClick ('left',522,209)	
	Sleep (750) 
	If TimerDiff($begin) > 5000 Then ExitLoop
	MouseClick ('left',766,504)	
	Sleep (750) 
	If TimerDiff($begin) > 5000 Then ExitLoop
	MouseClick ('left',677,489)	
	Sleep (750)	
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Re: Не получается написать даже простейший скрипт с функциями PixelGetColor и If

Итоговый скрипт: Объединяющий возможности включения паузы, работы определённый период времени и проверки цвета таков:
Код:
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip("Script is Paused")
WEnd
ToolTip("")
EndFunc
$begin = TimerInit()
While TimerDiff($begin) < 50000
  If PixelGetColor(1169, 556) = 0x0269D0 Then 
        MouseClick("primary", 800, 100, 1, 0)
        Sleep ( '150' )
        MouseClick("primary", 875, 1006, 1, 0)
        Sleep ( '150' )
    Else
        MouseClick("primary", 800, 800, 1, 0)
        Sleep ( '150' )
        MouseClick("primary", 1170, 580, 1, 0)
        Sleep ( '150' )
    EndIf
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")

Он правда, немного перебирает по времени, попытка решить эту незначительную проблему внедрив в код проверку времени перед каждым кликом:
Код:
Global $Paused
HotKeySet("{PAUSE}", "TogglePause") ;Назначение горячей клавиши. При нажатии Pause Break скрипт встанет на паузу
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip("Script is Paused")
WEnd
ToolTip("")
EndFunc
$begin = TimerInit()
$timeint = 50000 ;Назначение интервала времени (здесь тестовые 50 секунд)
$i = TimerDiff($begin)
While TimerDiff($begin) < 50000
If PixelGetColor(1169, 556) = 0x0269D0 Then  ;Назначение цвета и координат пикселя который необходимо проверить
Do
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 800, 100, 1, 0)
        Sleep ( '150' )
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 875, 1006, 2, 0)
        Sleep ( '150' )
Until $i = PixelGetColor(1184, 847) <> 0x026EDA
    Else
Do
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 800, 800, 2, 0)
        Sleep ( '150' )
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 1170, 580, 1, 0)
        Sleep ( '150' )
Until $i = PixelGetColor(1184, 847) = 0x026EDA
    EndIf
WEnd

:stars:тяжеловато для восприятия, и не работает как надо не знаю как оптимизировать.
 
Верх