<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Остановка цикла при нажатие клавиши]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14457</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14457&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Остановка цикла при нажатие клавиши».]]></description>
		<lastBuildDate>Sat, 29 Dec 2018 20:27:33 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130726#p130726</link>
			<description><![CDATA[<p><strong>KusochekDobra</strong></p><p>Ваш пример будет мне полезным.</p><p>Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Clannad5)]]></author>
			<pubDate>Sat, 29 Dec 2018 20:27:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130726#p130726</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130712#p130712</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?pid=127873#p127873">Была недавно тема</a>, если одной и той же кнопкой то так ещё можно:<br /></p><div class="codebox"><pre><code>
#if Loop
1::Loop := 0
#if !Loop
1::
	Loop := 1
	Loop
	{
		MsgBox,,First, % A_Index,0.1
		Sleep(200) 
		MsgBox,,Second, % A_TickCount,0.1
		Sleep(400) 
	}
	Return
#if

Sleep(Delay) {
	Global Loop
	Start := A_TickCount
 	While A_TickCount - Start &lt; Delay &amp;&amp; Loop
		Sleep 1
	If !Loop
		Exit
}
</code></pre></div><p>Если как таковой Sleep не нужен, то можно после каждой команды выполнять Sleep(-1) для проверки.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 29 Dec 2018 13:39:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130712#p130712</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130707#p130707</link>
			<description><![CDATA[<p>KeyWait может ждать пока вы не нажмете кнопку заданное кол-во секунд. Таким способом команда заменяет Sleep.<br />Если кнопка не была нажата за 10 секунд, то ErrorLevel будет содержать 1.<br />Следующей командой проверяете ErrorLevel и если кнопка была нажата делаете Break из цикла.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sat, 29 Dec 2018 12:48:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130707#p130707</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130705#p130705</link>
			<description><![CDATA[<p>В обсуждениях форума встречаются подобные темы, если их поискать.<br />Как правило, если имеется основной рабочий цикл включающий множество процедур, но ответственный, чтобы все они проходили только в заданных условиях, а сами процедуры не были ответственны за их проверку, создаётся <a href="https://autohotkey.com/docs/commands/SetTimer.htm">таймер</a>, в теле которого происходит проверка на соответствие окружения этим условиям. А так же переменная-тумблер, описывающая состояние(ВКЛ/ВЫКЛ). Тело таймера, просто изменяет содержимое переменной, если условия не соответствуют ожиданиям. </p><p>Таймеры выполняются по КД.</p><p>Если же нужна небольшая процедура выполняющаяся циклично и по условию, то опять же, удобней таймер и состояние. Например:<br /></p><div class="codebox"><pre><code>
state := false

F1::
	if (state := !state) {
		SoundBeep, 1500, 100
		ToolTip, ВЫКЛ
		SetTimer, Cycle, -1
		SetTimer, HideTooltip, -2000
	} else {
		ToolTip, ВЫКЛ
		SetTimer, HideTooltip, -2000
	}
Return

Cycle:
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	GoSub, HelloWorld
	Sleep, 10000
	SetTimer, Cycle, -1
Return

HelloWorld:
	if (!state) {
		SoundBeep, 1200, 100
		Exit
	}
	Msgbox, Hello World!
return
HideTooltip:
	ToolTip
return
</code></pre></div><p>Обратите внимание, что процедура Cycle не завершается сразу по нажатии F1. После выполнения подпрограммы HelloWorld, выполнение попадает в ожидание(Sleep) и пока оно не истечёт, не будет выполнена проверка состояния выполнения(state).</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sat, 29 Dec 2018 09:39:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130705#p130705</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130704#p130704</link>
			<description><![CDATA[<p><strong>stealzy</strong></p><p>Мне нужно чтобы макрос работал бесконечно, до тех пор пока не нажму 1 раз кнопку, независимо от того, в какой строке цикла я это нажал.<br />keywait же не запомнит мою клавишу, если я её нажму перед командой Sleep или после неё, пока Sleep выполняется, верно?</p><p>Возможно я просто тугой и не понимаю без примера.</p>]]></description>
			<author><![CDATA[null@example.com (Clannad5)]]></author>
			<pubDate>Sat, 29 Dec 2018 09:33:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130704#p130704</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130701#p130701</link>
			<description><![CDATA[<p>KeyWait, If, Break — с помощью этих команд можно сделать замену Sleep.<br />С другой стороны можно перезапустить скрипт командой Restart.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sat, 29 Dec 2018 08:14:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130701#p130701</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Остановка цикла при нажатие клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130699#p130699</link>
			<description><![CDATA[<p>Здравствуйте!</p><p>Интересует вопрос:</p><p>Как остановить цикл, используя только один файл Скрипт Ahk, если он уже начался и идёт 2 минуты, а мне нужно остановить его в любой момент, при нажатие одной клавишей?</p><br /><p>Возможна ли такая реализация?</p><p>Приведу пример кода, в котором нужно остановить цикл:</p><div class="codebox"><pre><code>F1::
Loop
{
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
Msgbox, Hello World!
Sleep, 10000
}
Return</code></pre></div><p>Есть ли функция, которую можно было бы вставить после Sleep, 10000, которая бы проверяла - нажимал я клавишу остановки или нет?</p><br /><p>Я знаю что скрипт AHK работает только в одном потоке, поэтому даже не представляю, как можно сделать второй поток, который бы проверял наличие на нажатие клавиши, не применяя сюда второй файл Ahk.</p><p>Неужели никак?</p><br /><p>P.S Не нужно код изменять на </p><div class="codebox"><pre><code>F1::
Loop, 10
{
Msgbox, Hello World!
Sleep, 10000
}
Return</code></pre></div><p>ибо тот пример я привёл так, как нужно.</p>]]></description>
			<author><![CDATA[null@example.com (Clannad5)]]></author>
			<pubDate>Sat, 29 Dec 2018 07:45:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130699#p130699</guid>
		</item>
	</channel>
</rss>
