Что нового

Повтор функции заданое количество раз.

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
jufas222,
Можно так попробовать сделать.
Код:
Global $aCountFunc[2][2] = [[5, 0],[10, 0]];_First - 5 раз, _Second - 10 раз

HotKeySet('{Esc}', '_Exit')

AdlibRegister('_First', 10000)
AdlibRegister('_Second', 5000)

While 1
	Sleep(500)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _First()
	ConsoleWrite('Func _First() ' & $aCountFunc[0][1] & @LF)
	; какие-то действия:
	For $i = 1 To 10
		Sleep(Random(250, 500, 1))
	Next
	;счетчик кол-ва выполнений:
	$aCountFunc[0][1] += 1
	If $aCountFunc[0][1] = $aCountFunc[0][0] Then
		AdlibUnRegister('_First')
		ConsoleWrite('Func _First() AdlibUnRegister' & @LF)
	EndIf
EndFunc   ;==>_First

Func _Second()
	ConsoleWrite('Func _Second() ' & $aCountFunc[1][1] & @LF)
	; какие-то действия:
	For $i = 1 To 10
		Sleep(Random(250, 500, 1))
	Next
	;счетчик кол-ва выполнений:
	$aCountFunc[1][1] += 1
	If $aCountFunc[1][1] = $aCountFunc[1][0] Then
		AdlibUnRegister('_Second')
		ConsoleWrite('Func _Second() AdlibUnRegister' & @LF)
	EndIf
EndFunc   ;==>_Second
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Garrett [?]
Нет, она не повторяется "столько раз, сколько вы ей задаете". Она выполняется один раз в определённый интервал времени, который вы задаёте.Не путайте понятия


Я знаю что она делает:smile: Я отметил для вас, какие функции должны вызыватся и повторятся столько раз, сколько я ей задам:smile:



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

madmasles [?]
Можно так попробовать сделать.


Извените, но я вас не пойму, если я напишу где вы мне выделили 1 функцию, то как быть с остальными тремя??
Мне нужно что бы мой скрипт через определённое количество времени выполнял, функцию столько раз, сколько я задам....с действием по вызову функции через определенный период времени я разобрался и осуществил это с помощью
Код:
AdlibRegister('leika', 3*60*1000) 
AdlibRegister('korm', 5*60*1000) 
AdlibRegister('raspilitel', 7*60*1000)  
AdlibRegister('musik', 9*60*1000)


А вот с повтором функции не могу не как разобратся.

Функция повторяется, через столько времени сколько я ей задам, а мне надо, что бы она И включалась через заданный промежуток каждый раз И повторялась столько раз сколько я ей задам (например 3 минуты прошло функция активировалась, прошла до конца и опять повторилась (столько раз, сколько я задам, и так всегда))...
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
jufas222
Возможно автор вопроса нечто такое имел в виду:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Программка", 282, 150, 372, 224)
$Label1 = GUICtrlCreateLabel("Функция Test_1", 24, 40, 86, 17)
$Label4 = GUICtrlCreateLabel("Введите количество повторений для функции", 24, 8, 236, 17)
$Input1 = GUICtrlCreateInput("", 128, 40, 129, 21)
$Button1 = GUICtrlCreateButton("Старт", 24, 100, 89, 33)
$Button2 = GUICtrlCreateButton("Выход", 168, 100, 89, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit		
		
		Case $Button1
			$Var1 = GUICtrlRead($Input1)
			Test_1($Var1)
		Case $Button2
			Exit
	EndSwitch
WEnd

Func Test_1($Var1)
	For $i = 1 To $Var1
		ConsoleWrite("Выполнено "&$i&@crlf)
	Next
EndFunc
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
К сожалению, но нет.

С помощью вашего кода я могу задать повтор определенной функции определенное количество раз, да это то, что мне нужно, но не совсем.

1) Надо, что бы функция 1,2,3,4 вызывались сами через заданный промежуток времени постоянно - это сделано.

2) Когда функции вызываются они должны повторятся столько раз, сколько я задам им в коде (в скрипте). Например функция 1
Код:
Func leika()
вызвается через 3 минуты, и она должна вместого 1 раза пройти 5 раз и завершится (завершится функция, а не скрипт).

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
jufas222
Я вам уже намекал, что есть частота повторений и интервал вызова функции.
Может на примере станет понятнее.
Код:
#include <Array.au3>

Global $iExit = True
Global $iLeiCount = 3
Global $iKorCount = 3
Global $iRasCount = 3
Global $iMusCount = 3
Global $aArrCount[4][6] = [['Period AdlibRegister',0,'Frequency',$iLeiCount,'leika()',0], _
						   ['Period AdlibRegister',0,'Frequency',$iKorCount,'korm()',0], _
						   ['Period AdlibRegister',0,'Frequency',$iRasCount,'raspilitel()',0], _
						   ['Period AdlibRegister',0,'Frequency',$iMusCount,'musik()',0]]

AdlibRegister('leika', 6000) 
AdlibRegister('korm', 9000) 
AdlibRegister('raspilitel', 12000)  
AdlibRegister('musik', 15000)

While 1
	Sleep(250)
WEnd


Func leika()
	$aArrCount[0][1] += 1
	For $i = 1 To $iLeiCount
		MsgBox(0, 'Call func leika()', 'Count: ' & $i, 1)
		$aArrCount[0][5] += 1
	Next
EndFunc

Func korm()
	$aArrCount[1][1] += 1
	For $i = 1 To $iKorCount
		MsgBox(0, 'Call func korm()', 'Count: ' & $i, 1)
		$aArrCount[1][5] += 1
	Next
EndFunc

Func raspilitel()
	$aArrCount[2][1] += 1
	For $i = 1 To $iRasCount
		MsgBox(0, 'Call func raspilitel()', 'Count: ' & $i, 1)
		$aArrCount[2][5] += 1
	Next
EndFunc

Func musik()
	$aArrCount[3][1] += 1
	For $i = 1 To $iMusCount
		MsgBox(0, 'Call func musik()', 'Count: ' & $i, 1)
		$aArrCount[3][5] += 1
	Next
	
	If $aArrCount[3][1] = 3 Then _Exit()
EndFunc

Func _Exit()
	AdlibUnRegister('leika')
	AdlibUnRegister('korm')
	AdlibUnRegister('raspilitel')
	AdlibUnRegister('musik')
	_ArrayDisplay($aArrCount)
	Exit
EndFunc
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Нет с примером я только ещё сильней запутался....может я не туда дописал свой код....так, как при активаци и прохождении 1 минуты вылазиет окошечко с подсчётом 1,2,3, далее окошечко проподает и скрипт не может продолжить работу, так как окно где скрипт должен функционировать, не становится активным.

Я просто взял и стёр строчку
Код:
MsgBox(0, 'Call func korm()', 'Count: ' & $i, 1)
, перезапустив скрипт, спустя 1 минуту функция выполнила действие, но выполнела 1 раз (вместо того как я понял должна была 3).

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

P.S. Ваш скрипт случайно создан не для того, что бы просто подсчитывать сколько раз функция выполнелась за время работы, вместо того чтобы выполнять заданое количество повторов???


P.S.S. Так я дописал свой код, в ваш:
Код:
#include <Array.au3>

Global $iExit = True
Global $iLeiCount = 3
Global $iKorCount = 3
Global $iRasCount = 3
Global $iMusCount = 3
Global $aArrCount[4][6] = [['Period AdlibRegister',0,'Frequency',$iLeiCount,'leika()',0], _
                           ['Period AdlibRegister',0,'Frequency',$iKorCount,'korm()',0], _
                           ['Period AdlibRegister',0,'Frequency',$iRasCount,'raspilitel()',0], _
                           ['Period AdlibRegister',0,'Frequency',$iMusCount,'musik()',0]]
Global $aPause[1] = [False]

AdlibRegister('leika',1*60*1000)
AdlibRegister('korm', 5*60*1000)
AdlibRegister('raspilitel', 22*60*1000)
AdlibRegister('musik', 15*60*1000)


HotKeySet("{F1}", "_Exit")
HotKeySet("{F2}","Pause")

While 1
	$aCoord=PixelSearch( 568, 108, 1342, 564, 0x965F24 )     ; мышка должна найти цвет и кликать на него.
If Not @error Then
    MouseClick('left', $aCoord[0], $aCoord[1], 10,7)
EndIf
WEnd

Func Pause()
	$aPause[0] = Not ($aPause[0])
	If $aPause[0] Then ToolTip ("'''Pause'''",@desktopwidth/2,55)
	While $aPause[0]
		Sleep(100)
    WEnd
	ToolTip("")
	EndFunc

Func leika()
    $aArrCount[0][1] += 1
    For $i = 1 To $iLeiCount
        $aArrCount[0][5] += 1
    Next
	Opt("PixelCoordMode", 2)
		Opt("MouseCoordMode", 2)
		Sleep(2000)
		$c = PixelGetColor(46, 47)


if $c = 0xFFCF11 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',46,47,1,5)
  EndIf

  $aCoord_6=PixelSearch( 1,71, 789, 526, 0x5BECF2)
If @error Then
     MouseClick('left',46, 47,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_6[0],$aCoord_6[1],1)
 EndIf









EndFunc

Func korm()
    $aArrCount[1][1] += 1
    For $i = 1 To $iKorCount
        $aArrCount[1][5] += 1
    Next
	Opt("PixelCoordMode", 2)
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(107, 41)


if $c = 0x50918A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',107,41,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',396, 356,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_9=PixelSearch( 5, 6, 795, 540, 0x7B6400)
If @error Then
     MouseClick('left',107,41,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_9[0],$aCoord_9[1],1)
 EndIf

EndFunc

Func raspilitel()
    $aArrCount[2][1] += 1
    For $i = 1 To $iRasCount
        $aArrCount[2][5] += 1
    Next
	Opt("PixelCoordMode", 2)
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(178, 45)


if $c = 0x62973A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',177,47,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',473, 362,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_12=PixelSearch( 5, 6, 795, 540, 0x75A04E)
If @error Then
     MouseClick('left',177,44,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_12[0],$aCoord_12[1],1)
 EndIf

EndFunc

Func musik()
    $aArrCount[3][1] += 1
    For $i = 1 To $iMusCount
        $aArrCount[3][5] += 1
    Next
	 Opt("PixelCoordMode", 2)
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(247, 33)


if $c = 0xB57D02 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',247,33,1,5)
  EndIf

  $aCoord_15=PixelSearch( 5, 6, 795, 540, 0xFFEE06)
If @error Then
     MouseClick('left',247,33,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_15[0],$aCoord_15[1],1)
 EndIf

    If $aArrCount[3][1] = 3 Then _Exit()
EndFunc

Func _Exit()
    AdlibUnRegister('leika')
    AdlibUnRegister('korm')
    AdlibUnRegister('raspilitel')
    AdlibUnRegister('musik')
    _ArrayDisplay($aArrCount)
    Exit
EndFunc
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Oн рабочий ? Точно? В смысле, код рабочий?
Я спотктнулся и упал :laugh: :laugh: :stars: :stars: :IL_AutoIt_1: :IL_AutoIt_1: :stars: :stars: :stars: :stars: :stars:
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Yuriy [?]
Я спотктнулся и упал
Я не пойму вы издеваетесь надомной???

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

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
jufas222
вы издеваетесь надомной???
Извини, пожалуйста.
Вовсе нет. Так уж получилось.
надо быстро сделать окно где функция должна выполнятся, активным.
Не вопрос. Перед выполнением функции проверяем наличие окна и,
если оно есть - активируем.
он выполнит заданное количество повторов и всё....
Вот тут я не понимаю, что надо. Зациклить что-ли навсегда? И по горячей
клавише разциклить? Хм слово то какое
Может перейдем к схеме "От простого к сложному". А то я запутался
в данном тех задании.

Ой, догадка. У тебя 5 функций. Все функции почти одинаковы.
Возможно ты хотел использовать одну функцию, но с разными параметрами (координаты, цвет ...) Тем самым, сократив код. Не?
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Yuriy [?]
Перед выполнением функции проверяем наличие окна и,если оно есть - активируем.
Скрипт пройдёт заданое количество раз, но что бы это осуществить нужна помощь человека, что бы ввести количество повторов.


Вот тут я не понимаю, что надо. Зациклить что-ли навсегда?

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


Код:
Global $aPause[1] = [False]
MsgBox(4,"Boot for Plants vs. Zombies","F1 =>> Exit"&@CRLF&"F2 = >> Pause")


HotKeySet("{F2}","Pause")
HotKeySet ("{F1}", "_Exit")

Func _Exit()
	Exit
EndFunc



AdlibRegister('leika', 22*60*1000) ; функция вызывается каждую Н-ную минуту
AdlibRegister('korm', 22*60*1000)  ; функция вызывается каждую Н-ную минуту
AdlibRegister('raspilitel',10*60*1000)  ; функция вызывается каждую Н-ную минуту
AdlibRegister('musik', 10*60*1000)   ; функция вызывается каждую Н-ную минуту





WinWaitActive ("Plants vs. Zombies")

While 1
      Opt("PixelCoordMode", 2)
	  Opt("MouseCoordMode", 2)
	$aCoord=PixelSearch( 568, 108, 1342, 564, 0x965F24 )     
If Not @error Then
    MouseClick('left', $aCoord[0], $aCoord[1], 10,7)
EndIf
	WEnd


	Func leika()
		Opt("PixelCoordMode", 2)     ;1 раз начало
		Opt("MouseCoordMode", 2)
		Sleep(2000)
		$c = PixelGetColor(46, 47)


if $c = 0xFFCF11 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',46,47,1,5)
  EndIf

  $aCoord_6=PixelSearch( 1,71, 789, 526, 0x5BECF2)
If @error Then
     MouseClick('left',46, 47,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_6[0],$aCoord_6[1],1)
 EndIf                                    ; 1 раз конец



 Opt("PixelCoordMode", 2)       ;2 раз начало
		Opt("MouseCoordMode", 2)
		Sleep(2000)
		$c = PixelGetColor(46, 47)


if $c = 0xFFCF11 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',46,47,1,5)
  EndIf

  $aCoord_7=PixelSearch( 1,71, 789, 526, 0x5BECF2)
If @error Then
     MouseClick('left',46, 47,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_7[0],$aCoord_7[1],1)
 EndIf                                                   ;2 раз конец





 Opt("PixelCoordMode", 2)                                 ;3 раз начало
		Opt("MouseCoordMode", 2)
		Sleep(2000)
		$c = PixelGetColor(46, 47)


if $c = 0xFFCF11 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',46,47,1,5)
  EndIf

  $aCoord_8=PixelSearch( 1,71, 789, 526, 0x5BECF2)
If @error Then
     MouseClick('left',46, 47,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_8[0],$aCoord_8[1],1)
 EndIf                                                  ;3 раз конец



 EndFunc




 Func korm()
	 Opt("PixelCoordMode", 2)                            ;1 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(107, 41)


if $c = 0x50918A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',107,41,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',396, 356,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_9=PixelSearch( 5, 6, 795, 540, 0x7B6400)
If @error Then
     MouseClick('left',107,41,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_9[0],$aCoord_9[1],1)
 EndIf                                     ;1 раз конец






 Opt("PixelCoordMode", 2)                     ;2 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(107, 41)


if $c = 0x50918A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',107,41,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',396, 356,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_10=PixelSearch( 5, 6, 795, 540, 0x7B6400)
If @error Then
     MouseClick('left',107,41,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_10[0],$aCoord_10[1],1)
 EndIf                                               ;2 раз конец






 Opt("PixelCoordMode", 2)                  ;3 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(107, 41)


if $c = 0x50918A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',107,41,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',396, 356,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf                

  $aCoord_11=PixelSearch( 5, 6, 795, 540, 0x7B6400)
If @error Then
     MouseClick('left',107,41,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_11[0],$aCoord_11[1],1)
 EndIf
	 EndFunc                                           ;3 раз конец




Func raspilitel()
	Opt("PixelCoordMode", 2)             ;1 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(178, 45)


if $c = 0x62973A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',177,47,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',473, 362,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_12=PixelSearch( 5, 6, 795, 540, 0x75A04E)
If @error Then
     MouseClick('left',177,44,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_12[0],$aCoord_12[1],1)
 EndIf                               ; 1 раз конец




 Opt("PixelCoordMode", 2)               ;2 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(178, 45)


if $c = 0x62973A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',177,47,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',473, 362,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_13=PixelSearch( 5, 6, 795, 540, 0x75A04E)
If @error Then
     MouseClick('left',177,44,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_13[0],$aCoord_13[1],1)
 EndIf              ;2 раз конец







 Opt("PixelCoordMode", 2)               ;3 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(178, 45)


if $c = 0x62973A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',177,47,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',473, 362,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_14=PixelSearch( 5, 6, 795, 540, 0x75A04E)
If @error Then
     MouseClick('left',177,44,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_14[0],$aCoord_14[1],1)
 EndIf                                             ;3 раз конец








 EndFunc



 Func musik()

	 Opt("PixelCoordMode", 2)       ;1 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(247, 33)


if $c = 0xB57D02 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',247,33,1,5)
  EndIf

  $aCoord_15=PixelSearch( 5, 6, 795, 540, 0xFFEE06)
If @error Then
     MouseClick('left',247,33,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_15[0],$aCoord_15[1],1)
 EndIf                  ;1 раз конец







 Opt("PixelCoordMode", 2)     ;2 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(247, 33)


if $c = 0xB57D02 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',247,33,1,5)
  EndIf

  $aCoord_16=PixelSearch( 5, 6, 795, 540,0xFFEE06)
If @error Then
     MouseClick('left',247,33,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_16[0],$aCoord_16[1],1)
 EndIf                 ;2 раз конец







 Opt("PixelCoordMode", 2)         ;3 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(247, 33)


if $c = 0xB57D02 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',247,33,1,5)
  EndIf

  $aCoord_17=PixelSearch( 5, 6, 795, 540, 0xFFEE06)
If @error Then
     MouseClick('left',247,33,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_17[0],$aCoord_17[1],1)
 EndIf
 EndFunc                       ;3 раз конец



Func Pause()
	$aPause[0] =Not ($aPause[0])
	If $aPause[0] Then ToolTip("'''PAUSE'''",@DesktopWidth/2,10)
	While $aPause[0]
		Sleep(100)
	WEnd
	ToolTip("")
	EndFunc



Взгляните на скрипт, каждая из функции вызывается каждый раз через заданное время.
В каждой функции 3 одинаковых операции, тем самым я задал каждой из функции 3 повтора, скрипт выглядет длинноватым, но работает так, как надо.
Я добиваюсь повтора функции без копирования, что бы скрипт выглядел, вот так:
Код:
Global $aPause[1] = [False]
MsgBox(4,"Boot for Plants vs. Zombies","F1 =>> Exit"&@CRLF&"F2 = >> Pause")


HotKeySet("{F2}","Pause")
HotKeySet ("{F1}", "_Exit")

Func _Exit()
	Exit
EndFunc



AdlibRegister('leika', 22*60*1000) ; функция вызывается каждую Н-ную минуту
AdlibRegister('korm', 22*60*1000)  ; функция вызывается каждую Н-ную минуту
AdlibRegister('raspilitel',10*60*1000)  ; функция вызывается каждую Н-ную минуту
AdlibRegister('musik', 10*60*1000)   ; функция вызывается каждую Н-ную минуту





WinWaitActive ("Plants vs. Zombies")

While 1
      Opt("PixelCoordMode", 2)
	  Opt("MouseCoordMode", 2)
	$aCoord=PixelSearch( 568, 108, 1342, 564, 0x965F24 )     
If Not @error Then
    MouseClick('left', $aCoord[0], $aCoord[1], 10,7)
EndIf
	WEnd


	Func leika()
		Opt("PixelCoordMode", 2)     ;1 раз начало
		Opt("MouseCoordMode", 2)
		Sleep(2000)
		$c = PixelGetColor(46, 47)


if $c = 0xFFCF11 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',46,47,1,5)
  EndIf

  $aCoord_6=PixelSearch( 1,71, 789, 526, 0x5BECF2)
If @error Then
     MouseClick('left',46, 47,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_6[0],$aCoord_6[1],1)
 EndIf                                    ; 1 раз конец



EndFunc




 Func korm()
	 Opt("PixelCoordMode", 2)                            ;1 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(107, 41)


if $c = 0x50918A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',107,41,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',396, 356,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_9=PixelSearch( 5, 6, 795, 540, 0x7B6400)
If @error Then
     MouseClick('left',107,41,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_9[0],$aCoord_9[1],1)
 EndIf                                     ;1 раз конец
	 EndFunc                                          




Func raspilitel()
	Opt("PixelCoordMode", 2)             ;1 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(178, 45)


if $c = 0x62973A then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',177,47,1,5)
Else
	MouseClick('left',725, 57,1,5)
	Sleep(1000)
	MouseClick('left',473, 362,1,5)
	Sleep(500)
	MouseClick('left',302, 399,1,5)
	Sleep(500)
	MouseClick('left',429, 552,1,5)
  EndIf

  $aCoord_12=PixelSearch( 5, 6, 795, 540, 0x75A04E)
If @error Then
     MouseClick('left',177,44,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_12[0],$aCoord_12[1],1)
 EndIf                               ; 1 раз конец
 EndFunc



 Func musik()

	 Opt("PixelCoordMode", 2)       ;1 раз начало
		Opt("MouseCoordMode", 2)
	 Sleep(2000)
		$c = PixelGetColor(247, 33)


if $c = 0xB57D02 then
$cc = 1
Else
$cc = 0
EndIf
Sleep(1000)
if $cc = 1 then
MouseClick('left',247,33,1,5)
  EndIf

  $aCoord_15=PixelSearch( 5, 6, 795, 540, 0xFFEE06)
If @error Then
     MouseClick('left',247,33,1,5)
 Else
	 sleep (3000)
	 MouseClick('left',$aCoord_15[0],$aCoord_15[1],1)
 EndIf                  ;1 раз конец
 EndFunc                      



Func Pause()
	$aPause[0] =Not ($aPause[0])
	If $aPause[0] Then ToolTip("'''PAUSE'''",@DesktopWidth/2,10)
	While $aPause[0]
		Sleep(100)
	WEnd
	ToolTip("")
	EndFunc


Как вы видите, этот скрипт отличается лишь тем что в функциях по 1 проходу, вместо 3, как в предидушим скрипте. Надо, что бы функции, как сейчас были в 1 проход, но с помощью скрипта задать несколько повторов для каждой из функции, не копируя её.
Например: функция вызывается с помощью
Код:
AdlibRegister('leika', 22*60*1000)

и должна пройти 3 раза

Вопрос, как реализовать повтор функции заданое количество раз, именно в скрипте (цифрой в коде), а не с помощью выскакивающих окошечек, с прозьбой ввести нужное количество повторов.

Ой, догадка. У тебя 5 функций. Все функции почти одинаковы.Возможно ты хотел использовать одну функцию, но с разными параметрами (координаты, цвет ...) Тем самым, сократив код. Не?

Все функции должны работать в своё время, вместе их обьединять не нужно.


P.S.

по горячей клавише разциклить

Это не то, что мне нужно, но я был бы рад, если бы вы предоставили мне информацию, как это осуществить :smile:.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
jufas222 [?]
Вы бы не могли уделить мне ещё время, и просто взять и вставить мой код в ваш
Код:
#include <Array.au3>

Opt("PixelCoordMode", 2)
Opt("MouseCoordMode", 2)

Global $iExit = True
Global $iLeiCount = 3
Global $iKorCount = 3
Global $iRasCount = 3
Global $iMusCount = 3
Global $aArrCount[4][6] = [['Period AdlibRegister',0,'Frequency',$iLeiCount,'leika()',0], _
                           ['Period AdlibRegister',0,'Frequency',$iKorCount,'korm()',0], _
                           ['Period AdlibRegister',0,'Frequency',$iRasCount,'raspilitel()',0], _
                           ['Period AdlibRegister',0,'Frequency',$iMusCount,'musik()',0]]
Global $iPause = False

AdlibRegister('leika',1*60*1000) ; Period! КАЖДУЮ МИНУТУ ПРОИСХОДИТ ВЫЗОВ ФУНКЦИИ!!!
;~ AdlibRegister('korm', 22*60*1000)  ; функция вызывается каждую Н-ную минуту
;~ AdlibRegister('raspilitel',10*60*1000)  ; функция вызывается каждую Н-ную минуту
;~ AdlibRegister('musik', 10*60*1000)   ; функция вызывается каждую Н-ную минуту

HotKeySet("{F1}", "_Exit")
HotKeySet("{F2}","Pause")

; ОСНОВНОЙ (main) ЦИКЛ!!!!!!!!!!!!!!
While 1
    ;$aCoord = PixelSearch( 568, 108, 1342, 564, 0x965F24 )     ; мышка должна найти цвет и кликать на него.
	;If Not @error Then
		;MouseClick('left', $aCoord[0], $aCoord[1], 10,7)
	;EndIf
	Sleep(250)
WEnd

Func Pause()
    $iPause = Not ($iPause)
    If $iPause Then ToolTip ("'''Pause'''", @desktopwidth/2, 100)
    While $iPause
        Sleep(250)
    WEnd
    ToolTip("")
EndFunc

Func leika()
	
	$aArrCount[0][1] += 1
    ToolTip (">> Period: " & $aArrCount[0][1], @DesktopWidth / 2, 100)
	Sleep(2000)
    For $i = 1 To $iLeiCount
        ToolTip (">> Frequency: " & $i, @DesktopWidth / 2, 100)
		
		$aArrCount[0][5] += 1
		
		Sleep(2000)
		$c = PixelGetColor(46, 47)


		If $c = 0xFFCF11 Then
			$cc = 1
		Else
			$cc = 0
		EndIf
		
		Sleep(1000)
		If $cc = 1 Then
			MouseClick('left',46,47,1,5)
		EndIf

		$aCoord_6=PixelSearch( 1,71, 789, 526, 0x5BECF2)
		If @error Then
			MouseClick('left',46, 47,1,5)
		Else
			Sleep (3000)
			MouseClick('left',$aCoord_6[0],$aCoord_6[1],1)
		EndIf
		
	Next
	ToolTip("")
EndFunc

;~ Func korm()
;~     $aArrCount[1][1] += 1
;~     For $i = 1 To $iKorCount
;~         $aArrCount[1][5] += 1
;~     Next
;~     Opt("PixelCoordMode", 2)
;~         Opt("MouseCoordMode", 2)
;~      Sleep(2000)
;~         $c = PixelGetColor(107, 41)


;~ if $c = 0x50918A then
;~ $cc = 1
;~ Else
;~ $cc = 0
;~ EndIf
;~ Sleep(1000)
;~ if $cc = 1 then
;~ MouseClick('left',107,41,1,5)
;~ Else
;~     MouseClick('left',725, 57,1,5)
;~     Sleep(1000)
;~     MouseClick('left',396, 356,1,5)
;~     Sleep(500)
;~     MouseClick('left',302, 399,1,5)
;~     Sleep(500)
;~     MouseClick('left',429, 552,1,5)
;~   EndIf

;~   $aCoord_9=PixelSearch( 5, 6, 795, 540, 0x7B6400)
;~ If @error Then
;~      MouseClick('left',107,41,1,5)
;~  Else
;~      sleep (3000)
;~      MouseClick('left',$aCoord_9[0],$aCoord_9[1],1)
;~  EndIf

;~ EndFunc

;~ Func raspilitel()
;~     $aArrCount[2][1] += 1
;~     For $i = 1 To $iRasCount
;~         $aArrCount[2][5] += 1
;~     Next
;~     Opt("PixelCoordMode", 2)
;~         Opt("MouseCoordMode", 2)
;~      Sleep(2000)
;~         $c = PixelGetColor(178, 45)


;~ if $c = 0x62973A then
;~ $cc = 1
;~ Else
;~ $cc = 0
;~ EndIf
;~ Sleep(1000)
;~ if $cc = 1 then
;~ MouseClick('left',177,47,1,5)
;~ Else
;~     MouseClick('left',725, 57,1,5)
;~     Sleep(1000)
;~     MouseClick('left',473, 362,1,5)
;~     Sleep(500)
;~     MouseClick('left',302, 399,1,5)
;~     Sleep(500)
;~     MouseClick('left',429, 552,1,5)
;~   EndIf

;~   $aCoord_12=PixelSearch( 5, 6, 795, 540, 0x75A04E)
;~ If @error Then
;~      MouseClick('left',177,44,1,5)
;~  Else
;~      sleep (3000)
;~      MouseClick('left',$aCoord_12[0],$aCoord_12[1],1)
;~  EndIf

;~ EndFunc

;~ Func musik()
;~ 	
;~ 	$aArrCount[3][1] += 1
;~     For $i = 1 To $iMusCount
;~         $aArrCount[3][5] += 1
;~     Next

;~ 	Sleep(2000)
;~ 	$c = PixelGetColor(247, 33)

;~ 	if $c = 0xB57D02 then
;~ 		$cc = 1
;~ 	Else
;~ 		$cc = 0
;~ 	EndIf
;~ 	Sleep(1000)
;~ 	if $cc = 1 then
;~ 		MouseClick('left',247,33,1,5)
;~ 	EndIf

;~ 	$aCoord_15=PixelSearch( 5, 6, 795, 540, 0xFFEE06)
;~ 	If @error Then
;~ 		MouseClick('left',247,33,1,5)
;~ 	Else
;~ 		Sleep (3000)
;~ 		MouseClick('left',$aCoord_15[0],$aCoord_15[1],1)
;~ 	EndIf

;~     ;If $aArrCount[3][1] = 3 Then _Exit()
;~ EndFunc

Func _Exit()
    AdlibUnRegister('leika')
;~     AdlibUnRegister('korm')
;~     AdlibUnRegister('raspilitel')
;~     AdlibUnRegister('musik')
    _ArrayDisplay($aArrCount)
    Exit
EndFunc
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Большое спасибо вам, ваш код работает так, как мне и нужно, вот только я в нём не совсем разобрался, надеюсь в следующем скрипте, где нужен будет повтор функции я сам смогу его оформить.
Всем большое спасибо за помощь :beer:
 
Верх