Что нового

[Мышь, клавиатура] Как реализовать выход из цикла “While” – “WEnd” если условие стало не верно

Майор

Новичок
Сообщения
7
Репутация
0
Здравствуйте уважаемое сообщество. Еще раз уповаю на вашу помощь.
Скрипт.
Код:
#include <Misc.au3>
Global Const $BtnKey1Down = '_IsPressed(79)' ; F10 key
Global Const $BtnKey2Down = '_IsPressed(78)' ;F9 key
Loop()
Func Loop()
   While 1
      If Execute($BtnKey2Down) And ($BtnKey1Down) Then
         While Execute($BtnKey2Down) And Execute($BtnKey1Down) ; нажата кнопка f9&f8
				Sleep(100)
				ConsoleWrite('a '& @LF)
				Sleep(100)
				ConsoleWrite('b'& @LF)
				Sleep(100)
				ConsoleWrite('c '& @LF)
				Sleep(100)
				ConsoleWrite('d '& @LF)
				Sleep(100)
				ConsoleWrite('e '& @LF)
				Sleep(100)
				ConsoleWrite('f '& @LF)
				Sleep(100)
				ConsoleWrite('g _'& @LF)
			WEnd
      EndIf
   WEnd
EndFunc

Выполняет функцию Loop если нажаты обе клавиши F9 и F8.
Вопрос: как реализовать прерывание функции Loop если была отжата одна из клавиш (с условием – возвращение скрипта в исходное состояние)
 
A

Alofa

Гость
Эх Майор, Майор покурить бы вам Справку и Вот этот набор, тоже.
Код:
#include <Misc.au3>

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

While 1 ; 		   "F7"                 "F9"
	If _IsPressed('76') And _IsPressed('78') Then ; Контролируем одновременное нажатие "F7" и "F9"
		Sleep(100)
		ConsoleWrite('a ' & @LF)
		Sleep(100)
		ConsoleWrite('b' & @LF)
		Sleep(100)
		ConsoleWrite('c ' & @LF)
		Sleep(100)
		ConsoleWrite('d ' & @LF)
		Sleep(100)
		ConsoleWrite('e ' & @LF)
		Sleep(100)
		ConsoleWrite('f ' & @LF)
		Sleep(100)
		ConsoleWrite('g _' & @LF)
	Else
		Sleep(200)
	EndIf
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Код:
#include <Misc.au3>

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

While 1 ;		  "F7" 					"F9"
	If _IsPressed('76') And _IsPressed('78') Then ; Контролируем одновременное нажатие "F7" и "F9"
		Loop()
	Else
		Sleep(200)
	EndIf
WEnd


Func Loop()
	Sleep(100)
	ConsoleWrite('a ' & @LF)
	Sleep(100)
	ConsoleWrite('b' & @LF)
	Sleep(100)
	ConsoleWrite('c ' & @LF)
	Sleep(100)
	ConsoleWrite('d ' & @LF)
	Sleep(100)
	ConsoleWrite('e ' & @LF)
	Sleep(100)
	ConsoleWrite('f ' & @LF)
	Sleep(100)
	ConsoleWrite('g _' & @LF)
EndFunc   ;==>Loop

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
М

Майор

Новичок
Сообщения
7
Репутация
0
Согласно спецификации "Для любого из группы операторов будет выполнена первая группа операторов следующая после истинного условия"
Т.е. чтобы выйти во время выполнения цикла нужно реализовать проверку истинности условия после каждого шага цикла.
Что-то вроде:
Код:
#include <Misc.au3>
Global Const $BtnKey1Down = '_IsPressed(79)' ; F10 key
Global Const $BtnKey2Down = '_IsPressed(78)' ;F9 key
Loop()
Func Loop()
   While 1
      If Execute($BtnKey2Down) And ($BtnKey1Down) Then
         While Execute($BtnKey2Down) And Execute($BtnKey1Down) ; нажата кнопка F9&F10
				Sleep(100)
				ConsoleWrite('a '& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
				Sleep(100)
				ConsoleWrite('b'& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
				Sleep(100)
				ConsoleWrite('c '& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
				Sleep(100)
				ConsoleWrite('d '& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
				Sleep(100)
				ConsoleWrite('e '& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
				Sleep(100)
				ConsoleWrite('f '& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
				Sleep(100)
				ConsoleWrite('g _'& @LF)
			If Not Execute($BtnKey2Down) or Not Execute($BtnKey1Down) Then 
				ExitLoop
			EndIf
			WEnd
      EndIf
   WEnd
EndFunc

Вот сейчас все работает.
Alofa огромное Вам спасибо (говорю без ерничества)
P.S. Правда Ваши примеры у меня почему-то не сработали
 
A

Alofa

Гость
Код:
#include <Misc.au3>

Loop()

Func Loop()
	Local $sLine[7] = ['a', 'b', 'c', 'd', 'e', 'f', 'g _']
	While 1
		For $s In $sLine
			If _IsPressed('78') And _IsPressed('79') Then
				Sleep(100)
				ConsoleWrite($s & @LF)
			Else
				ExitLoop
			EndIf
		Next
		If Not _IsPressed('78') And Not _IsPressed('79') Then Sleep(200)
	WEnd
EndFunc   ;==>Loop
 
Верх