Что нового

рестарт при бездействии мышки по времени

EgorKA_rAx

Новичок
Сообщения
6
Репутация
0
Помогите дописать скрипт, что бы он автоматически начинал заново делать цикл по истечении какого то периода если мишка бездействует
Код:
HotKeySet("{F1}", "_pause")		;задаем кнопочку паузы
Func	_pause()
		MsgBox(0,"kill dropezone","Как убьешь, жми!")
EndFunc
$numraz =0
While $numraz <=9999999
	
	While PixelChecksum(117,50,127,60) <> 2722339399   ; ждем победа
		Sleep(500)
		WEnd
	
	MouseClick("",404,337,1,5)
	
	While	PixelGetColor(900, 410) = 0x1c293c	;Ждем раскрытия контейнеров
		Sleep(5)
		WEnd

		$nummod =0
		While	$nummod <=9					;повтор цыкла перетаскивания модуля
		$nummod =$nummod +1
		Sleep(100)

	$module = 0xb4c5cd
	if	PixelGetColor(160, 300) = $module	Then  ;ждем появления "Модуль"
		Sleep(100)
	
		MouseMove(150,260,0)
		MouseDown("left")
		MouseMove(600,260,0)
		MouseUp("left")
			Sleep(500)
	
	Else	
		While	PixelGetColor(525, 470) <> 0xffffff	;ждем появления кнопочки "Принять"
		Sleep(20)
		WEnd
	EndIf
	
WEnd
	MouseClick("left", 525, 470,1,0)		;жмем на кнопочку "Принять"	

$numraz = $numraz +1
WEnd


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

madmasles

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


С уважением, ваш Глобальный модератор.






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

Еще один ответ до реакции на предупреждение и буду банить отвечающего. :mad:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Пойдет. Твой скрипт не имеет привязки к браузеру в принципе, так что смотри где у тебя он зацикливается с помощью какого-нибудь например логирования, например ConsloeWrite. У тебя слишком большое соотношение While циклов на строчку кода. Где-то в нем скрипт и зацикливается
 
Автор
E

EgorKA_rAx

Новичок
Сообщения
6
Репутация
0
правильно что он зацикливается, это и должно быть!

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


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

небольшое уточнение, а если у меня 3 скрипта, которые должны работать одновременно, можно сделать так?

Код:
$numraz =0
While $numraz <=9999999
; старт скриптов
$_pixel= PixelGetColor(525, 470)
While True
     If $_pixel1 <> 0xffffff  Then 
     somefunc0()  ;запуск скрипта или скомпилированного 1.exe
     somefunc1()  ;запуск скрипта или скомпилированного 1.exe
     somefunc2()  ;запуск скрипта или скомпилированного 1.exe
WEnd
; старт скриптов

;проверка работы скриптов
$pos = MouseGetPos()
ConsoleWrite(@CRLF & "X : " & $pos[0] & "___" &   "Y : " & $pos[1])
AdlibRegister("_mouseMe", 3000)
Func _mouseMe()
    $chk = MouseGetPos()
    ConsoleWrite(@CRLF & "X : " & $chk[0] & "___" &   "Y : " & $chk[1])
    If $chk[0] = $pos[0] And $chk[1] = $pos[1] Then
        ProcessClose ( "process" )
        ProcessClose ( "process" )
        ProcessClose ( "process" )
    Else
        $pos = MouseGetPos()
    EndIf
EndFunc
While 1
    Sleep(100)
WEnd
;проверка работы скриптов

;перезапуск скриптов
$numraz = $numraz +1
WEnd
;перезапуск скриптов


Что скажите по этому варианту? Имеет место этому жить или надо сперва соединить все 3 скрипта?

и потом можно все это будет скомпилировать в один EXE-шник?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Прям слишком много ты нагородил. Теперь тебе придется еще при таком раскладе тебе придется организовывать еще и обмен инфой между скриптами каким-нибудь образом, чтобы главный скрипт знал что другие скрипты и вправду работают. На форуме темы взаимодействия между скриптами ни раз появлялись и разъяснялись. Но имхо проще воспользоваться функцией TimerInit и внутри циклов просто проверять
Код:
if timerdiff($var) > [указать число в мс] then exitloop
 
Автор
E

EgorKA_rAx

Новичок
Сообщения
6
Репутация
0
Можете на моем примере показать как это реализовать? То я не понял как работать с переменной " TimerDiff "

еще думал сделать так:

Код:
#pragma compile(AutoItExecuteAllowed, true)				;Запуск скомпилированным скриптом других скриптов
HotKeySet("{f2}", "_exit")
Func _exit()
    Exit
EndFunc

   Run(@WorkingDir & "\start.bat", "", @SW_hide)

;закрытие   EXE если простой больше 90 секунд
$pos = MouseGetPos()
ConsoleWrite(@CRLF & "X : " & $pos[0] & "___" &   "Y : " & $pos[1])

AdlibRegister("_mouseMe", 90000)

   Func _mouseMe()
    $chk = MouseGetPos()

    ConsoleWrite(@CRLF & "X : " & $chk[0] & "___" &   "Y : " & $chk[1])

	  If $chk[0] = $pos[0] And $chk[1] = $pos[1] Then
		 Beep(100, 500)
		 
			ProcessClose("1.exe")    ; первый скомпилированный скрипт
			   Local $PID = ProcessExists("1.exe") ; Возвращает PID , если процесс не найден.
			   If $PID Then ProcessClose($PID)
	  
			ProcessClose("2.exe")    ; второй скомпилированный скрипт
			   Local $PID = ProcessExists("2.exe") ; Возвращает PID , если процесс не найден.
			   If $PID Then ProcessClose($PID)

			ProcessClose("3.exe")    ; третий скомпилированный скрипт
			   Local $PID = ProcessExists("3.exe") ; Возвращает PID , если процесс не найден.
			   If $PID Then ProcessClose($PID)
	  Sleep(500)
	  Run(@WorkingDir & "\start.bat", "", @SW_hide)
	  
;~      _restartMePlease()
    Else
        $pos = MouseGetPos()
    EndIf

EndFunc

While 1
    Sleep(100)
	
WEnd
;закрытие   EXE


вроде даже работает :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если честно не имею даже желания копаться, ты используешь AdlibRegister которым я не пользуюсь совсем либо для обработки GUI.

Посмотри пример TimerInit из справки, там все предельно ясно
 
Верх