Что нового

Запуск цикла по нажатию кнопки

havi

Новичок
Сообщения
30
Репутация
1
Версия AutoIt: 3.3.7

Описание: Есть скрипт
Код:
While 1
$coord = PixelSearch( 1081, 556, 1081, 556, 0xFFFFFF)
If Not @error Then
    While 1
    Send ("1")
    $coord = PixelSearch( 1560, 829, 1560, 829, 0xFFFFFF)
    if @error Then ExitLoop
WEnd
EndIf
WEnd


Сейчас он по смене цвета на экране нажимает на "1". Всегда.
Нужно, что бы он работал следующим образом:
Пользователь нажимает кнопку E и в следующий раз, когда цвет нужного пикселя изменится и примет значение #FFFFFF, то нажмётся "1".
Но при этом если пользователь не нажимал кнопку E, то "1" не нажималось и если пользователь нажал E и кнопка 1 нажалась, то при повторной смене цвета на #FFFFFF нажатие "1" не требовалось.
Не знаю, понятно, ли я всё изложил. Попробую описать это алгоритмом действий:

Цвет(Пиксель принял значение #FFFFFF)
Ничего(Не происходит ничего)
Цвет
Ничего
Нажатие E
Ничего
Цвет
Нажатие 1(программой)
Цвет
Ничего
Ничего
Нажатие E
Ничего
Цвет
Нажатие 1(программой)
Примечания: Цикл происходит единожды после нажатия E. Заранее спасибо
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Как будто стараетесь все усложнить.
В случае нажатия E - будем ждать определенного цвета пикселя, как находим - жмем 1 и опять ждем. Это вы имели ввиду?

Код:
Global $bWait = False
HotKeySet( "e", "__OnPressButton" )
; --
While 1
	If $bWait Then
		$coord = PixelSearch( 1081, 556, 1081, 556, 0xFFFFFF)
		If Not @Error Then
			Send ("1")
			$bWait = False
		EndIf
	EndIf
WEnd

Func __OnPressButton()
	$bWait = True
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
firex
Опечаточка в строке
Код:
If Not @Error And
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
А так же опечатка в строке:
Код:
While 1
    If $bWait = True Then
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Dima1337
Код:
If ( Not ( ( ( $bWait = True ) = True ) = True ) ) = False Then

Так может сразу так?
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Не пишите ерунду - изучайте синтаксис.
Эмм, знаете, ерунда тут в коде. Автор темы хочет: При нажатии Е цикл выполняется единожды и ждет повторного Е. Однако это не возможно так как нет условия остановки цикла.
Код:
Global $bWait = False
HotKeySet( "e", "__OnPressButton" )
; --
While 1
    If $bWait Then ;Вот сдесь нет условия. А значит ообще никаких ограничений для дальнейшего выполнения нет.
        $coord = PixelSearch( 1081, 556, 1081, 556, 0xFFFFFF)
        If Not @Error Then
            Send ("1")
            $bWait = False
        EndIf
    EndIf
WEnd

Func __OnPressButton()
    $bWait = True
EndFunc


Спрогнозирую работу скрипта: Начало цикла. Если $bWait (По умолчанию = False) Затем, поиск пикселя по координатам, если не найден @Error найден отправка 1, смена значения $bWait на False, начать цикл заного.
Теперь ясно? Без указания в строке 5 $bWait = true мы не ограничим скрипт и задуманная остановка цикла после 1 круга будет не осуществлена.



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

Вдумайтесь в строку кода которая не несет смысла:
Код:
If $bWait Then

Если $bWait (По умолчанию = False) Затем
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
firex,
Достаточно
Код:
Global $bWait

Dima1337,
Ваши теоретические выкладки ошибочны, читайте справку.
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Что ж, опробовав скрипт упростив его до банального Send вынужден признать что был не прав. Всегда описывал условия по другому потому и не взяв на веру возражал... При написании в условии
Код:
if $bWait = True
ефект тот же.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
madmasles
Да, по умолчанию это "", False, 0. С одной стороны удобно, но бывали случаи когда подобное сбивало работу некоторых проектов, поэтому взял привычку заранее все указывать.
 
Верх