<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Не прерывается SetTimer]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=11478</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11478&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Не прерывается SetTimer».]]></description>
		<lastBuildDate>Thu, 07 Apr 2016 20:18:07 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102393#p102393</link>
			<description><![CDATA[<p><span style="color: green"><strong>Morty Mels</strong>, исправьтесь скорее.</span></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 07 Apr 2016 20:18:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102393#p102393</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102392#p102392</link>
			<description><![CDATA[<div class="codebox"><pre><code>SendKey(Key, Pause, Script, TogleChat, Out) {
	WinGet, WindowPid, pid, WARFRAME
	WinGet, ActivePid, pid, A
	if (((ActivePid != WindowPid) or !GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;) or (TogleChat=&quot;true&quot;)) and (Out=&quot;true&quot;)) {
		SetCapsLockState, off
		SetTimer, %Script%, off
		Exit 
	}
	Send, %Key%
	Sleep Pause
}

Mirage4:
	Name:=&quot;Mirage4&quot;
	SendKey(&quot;{vk34 2}&quot;, 2500, Name, TogleChat, &quot;true&quot;)
	SendKey(&quot;{vk34}&quot;,625, Name, TogleChat, &quot;true&quot;)
	SendKey(&quot;{vk53 down}&quot;, 625, Name, TogleChat, &quot;true&quot;)
	SendKey(&quot;{vk53 up}&quot;,625,  Name, TogleChat, &quot;false&quot;)
	SendKey(&quot;{vk57 down}&quot;,625, Name, TogleChat, &quot;true&quot;)
	SendKey(&quot;{vk57 up}&quot;,625, Name, TogleChat, &quot;false&quot;)
	SetTimer, %Name%, 0
Exit

~*vk14::
	TogleChat:=&quot;false&quot;
	Send, {vk54}{vk08}{vk1B}
	SetTimer, Mirage4, 0
return

~*vk54::
	TogleChat:=&quot;true&quot;</code></pre></div><p>Я решил проблему примерно так + прикрутил лишнюю функцию</p><p>без нее выглядит так<br /></p><div class="codebox"><pre><code>SendKey(Key, Pause, Script, Out) {
	WinGet, WindowPid, pid, WARFRAME
	WinGet, ActivePid, pid, A
	if (((ActivePid != WindowPid) or !GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;)) and (Out=&quot;true&quot;)) {
		SetCapsLockState, off
		SetTimer, %Script%, off
		Exit 
	}
	Send, %Key%
	Sleep Pause
}

Mirage4:
	Name:=&quot;Mirage4&quot;
	SendKey(&quot;{vk34 2}&quot;, 2500, Name, &quot;true&quot;)
	SendKey(&quot;{vk34}&quot;,625, Name, &quot;true&quot;)
	SendKey(&quot;{vk53 down}&quot;, 625, Name, &quot;true&quot;)
	SendKey(&quot;{vk53 up}&quot;,625,  Name, &quot;false&quot;)
	SendKey(&quot;{vk57 down}&quot;,625, Name, &quot;true&quot;)
	SendKey(&quot;{vk57 up}&quot;,625, Name, &quot;false&quot;)
	SetTimer, %Name%, 0
Exit

~*vk14::
	SetTimer, Mirage4, 0
return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Morty Mels)]]></author>
			<pubDate>Thu, 07 Apr 2016 20:13:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102392#p102392</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102374#p102374</link>
			<description><![CDATA[<p>Редакция первого варианта с кривым форматированием:<br /></p><div class="codebox"><pre><code>
SendKey(Key, Pause) {
tooltip,% &quot;Проверка: &quot; Key &quot;`n&quot; Pause
;	ControlSend, , %Key%, WARFRAME
	Sleep Pause
}

OutPoint(Script) {
	WinGet, WindowPid, pid, WARFRAME
	WinGet, ActivepPid, pid, A
	if (ActivepPid != WindowPid or !GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;)) {
		SetTimer, %Script%, off
                return 1
	}
}

~*vk14::	;Запускаем скрипт Mirage4 если CapsLock включен и ВЫКЛЮЧАЕМ, если выключен.
	Name:=&quot;Mirage4&quot;
        if !OutPoint(Name)
	  SetTimer, %Name%,0
return

Mirage4: ; Сам скрипт
tooltip,% &quot;Проверка таймера: &quot; a_tickcount,0,,2
	Name:=&quot;Mirage4&quot;
if !OutPoint(Name)
	SendKey(&quot;{vk53 down}&quot;,625)
if !OutPoint(Name)
	SendKey(&quot;{vk53 up}&quot;,625)
if !OutPoint(Name)
	SendKey(&quot;{vk57 down}&quot;,625)
if !OutPoint(Name)
	SendKey(&quot;{vk57 up}&quot;,625)
if !OutPoint(Name)
	SendKey(&quot;{vk34 2}&quot;,2500)
if !OutPoint(Name)
	SendKey(&quot;{vk34}&quot;,625)
if OutPoint(Name)
  sleep,100
return
</code></pre></div><p>И зачем отправлять виртуальный и скан код одновременно, мне кто-нибудь ответит?</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Thu, 07 Apr 2016 14:06:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102374#p102374</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102369#p102369</link>
			<description><![CDATA[<p>Return внутри функции/метки не прерывает потока.<br />Насколько я понимаю прервать поток извне невозможно.<br />Можно вынести секцию Mirage4 в отдельный процесс и запускать/прибивать его (Run Mirage4.ahk,, m4pid; Process, close, % m4pid).<br />Либо костыль - добавить проверку в каждую операцию Mirage4:<br /></p><div class="codebox"><pre><code>SendKeyAndCheck(Key, Pause) {
	if (!WinActive(&quot;WARFRAME&quot;) Or  !GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;))
		 Exit
	ControlSend, , %Key%, WARFRAME
	Sleep Pause
}

~*vk14sc03A::SetTimer, Mirage4, % GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;) ? 0 : &quot;off&quot;

Mirage4:
	SendKeyAndCheck(&quot;{vk53sc01F down}&quot;,625)
	SendKeyAndCheck(&quot;{vk53sc01F up}&quot;,625)
	SendKeyAndCheck(&quot;{vk57sc011 down}&quot;,625)
	SendKeyAndCheck(&quot;{vk57sc011 up}&quot;,625)
	SendKeyAndCheck(&quot;{vk34sc005 2}&quot;,2500)
	SendKeyAndCheck(&quot;{vk34sc005}&quot;,625)
return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Thu, 07 Apr 2016 07:29:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102369#p102369</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102364#p102364</link>
			<description><![CDATA[<p>Для прерывания потока, вроде, return нужно использовать... или я отстал от жизни?</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Thu, 07 Apr 2016 03:23:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102364#p102364</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102302#p102302</link>
			<description><![CDATA[<p><span style="color: green"><strong>Morty Mels</strong>, ознакомьтесь с <a href="http://forum.script-coding.com/viewtopic.php?id=6148">этой</a> темой, отредактируйте заголовок.</span></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 05 Apr 2016 10:01:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102302#p102302</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102294#p102294</link>
			<description><![CDATA[<p>В функции OutPoint() ошибка в именах перемнных (ActivepPid и ActivePid)</p><p>Прерывание выполняющегося потока из функции можно осуществить командой Exit.</p><p>Условие на активный капслок - (GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;)</p><p>Из следующей функции будет прерываться поток, если капслок деактивирован:<br /></p><div class="codebox"><pre><code>OutPoint(Script) { ;Скрипт для проверки активности ключевого окна и остановки скрипта, если активно побочное.
	WinGet, WindowPid, pid, WARFRAME
	WinGet, ActivePid, pid, A
	if ( (ActivePid != WindowPid) or !(GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;)) ) {
		SetTimer, %Script%, off ; Не прерывает Mirage4 &lt;&lt;&lt;!&gt;&gt;&gt;
		Exit
	}
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (mafckz)]]></author>
			<pubDate>Tue, 05 Apr 2016 08:28:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102294#p102294</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Не прерывается SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102290#p102290</link>
			<description><![CDATA[<p>Написал простенький скрипт, но в силу моей необразованности в данном языке, не могу прервать выполнение команд. Буду очень рад, если поможете оптимизировать его!</p><p>В идеале скрипт должен отправлять нажатие клавиш в ключевое окно, но так как отправка клавиш работает не так как мне нужно, то он печатает только в том случае, если ключевое окно и включен CapsLock. Проблема заключается в том, что скрипт доходит до конца и не прерывается на середине, если CapsLock выключен.</p><div class="codebox"><pre><code>;Моменты основных ошибок буду помечать знаком &lt;&lt;&lt;!&gt;&gt;&gt;

SendKey(Key, Pause) { ;Скрипт на отправление нажатия клавиши в необходимое окно. Работает коряво, тат как печатает в ключевое окно скрипт лишь в том случае, если оно активно, но хоть так... Будет круто, если поможете и с этой проблемой, но это не самое главное.
	ControlSend, , %Key%, WARFRAME
	Sleep Pause
}

OutPoint(Script) { ;Скрипт для проверки активности ключевого окна и остановки скрипта, если активно побочное.
	WinGet, WindowPid, pid, WARFRAME
	WinGet, ActivepPid, pid, A
	if !(ActivePid = WindowPid) {
		SetTimer, %Script%, off ; Не прерывает Mirage4 &lt;&lt;&lt;!&gt;&gt;&gt;
	}
}

~*vk14sc03A::	;Запускаем скрипт Mirage4 если CapsLock включен и ВЫКЛЮЧАЕМ, если выключен. 
	SetTimer, Mirage4, % GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;) ? 0 : &quot;off&quot;; Не прерывает Mirage4 &lt;&lt;&lt;!&gt;&gt;&gt;
return

Mirage4: ; Сам скрипт
	Name:=&quot;Mirage4&quot;
	SendKey(&quot;{vk53sc01F down}&quot;,625)
	SendKey(&quot;{vk53sc01F up}&quot;,625)
	OutPoint(Name)
	SendKey(&quot;{vk57sc011 down}&quot;,625)
	SendKey(&quot;{vk57sc011 up}&quot;,625)
	OutPoint(Name)
	SendKey(&quot;{vk34sc005 2}&quot;,2500)
	OutPoint(Name)
	SendKey(&quot;{vk34sc005}&quot;,625)
	SetTimer, %Name%, % GetKeyState(&quot;CapsLock&quot;, &quot;T&quot;) ? 0 : &quot;off&quot;; Не прерывает Mirage4 &lt;&lt;&lt;!&gt;&gt;&gt;	
Exit</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Morty Mels)]]></author>
			<pubDate>Tue, 05 Apr 2016 07:18:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102290#p102290</guid>
		</item>
	</channel>
</rss>
