<?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=6736</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6736&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)».]]></description>
		<lastBuildDate>Sat, 28 Jan 2012 12:37:50 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56071#p56071</link>
			<description><![CDATA[<p>В <br /></p><div class="codebox"><pre><code>If (JoyZState &gt; 35)
Return</code></pre></div><p>Нет необходимости. Более ничем помочь не могу.</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Sat, 28 Jan 2012 12:37:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56071#p56071</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56070#p56070</link>
			<description><![CDATA[<p>Спасибо. Это почти то, что я хотел. Я забыл убрать JoyPOV из скрипта. Мне нужно работать только с переменной JoyZState. Получилось вот так:<br /></p><div class="codebox"><pre><code>#Persistent
TKeyState = 0
ThrottleDelay = 50
 
SetTimer, CheckThrottleState, %ThrottleDelay%
Return
 
CheckThrottleState:
    GetKeyState, JoyZState, JoyZ

    if (JoyZState &lt; 35) {
        if (TKeyState = 0) {
            Send {vk54 down} ; T
            TKeyState := 1
        }
        If (JoyZState &gt; 35)
            Return
        SetTimer, SendRKey, -1
        Return 
    }
    Else If (JoyZState &lt; 65 &amp;&amp; TKeyState = 1) {
        Send {vk54 Up} ; T
        TKeyState := 0
        Return
    }
Return
 
SendRKey:
    Send {vk52 down} ; R
    sleep 70
    Send {vk52 up}
    Sleep 700
Return</code></pre></div><p>Но теперь вместо того, чтобы кнопки тыкались попеременно, теперь тыкается только &quot;Т&quot; вначале, а потом с задержкой тыкается &quot;R&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (bigden)]]></author>
			<pubDate>Sat, 28 Jan 2012 12:26:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56070#p56070</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56047#p56047</link>
			<description><![CDATA[<div class="codebox"><pre><code>#Persistent
TKeyState = 0
ThrottleDelay = 50

SetTimer, CheckThrottleState, %ThrottleDelay%
Return

CheckThrottleState:
    GetKeyState, JoyZState, JoyZ
    GetKeyState, POVState, JoyPOV
    if (JoyZState &lt; 35) {
        if (TKeyState = 0) {
            Send {vk54 down} ; T
            TKeyState := 1
        }
        If (POVState &gt; 35)
            Return
        SetTimer, SendRKey, -1
        Return 
    }
    Else If (JoyZState &lt; 65 &amp;&amp; TKeyState = 1) {
        Send {vk54 Up} ; T
        TKeyState := 0
        Return
    }
Return

SendRKey:
    Send {vk52 down} ; R
    sleep 70
    Send {vk52 up}
    Sleep 700
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 27 Jan 2012 14:54:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56047#p56047</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56046#p56046</link>
			<description><![CDATA[<p>Скрипт работает не так как нужно.<br /></p><div class="codebox"><pre><code>ThrottleStateW = 0

ThrottleDelay = 50

SetTimer, Throttle, %ThrottleDelay%

Throttle:
{

    GetKeyState, JoyZState, JoyZ


    if JoyZState &lt; 35
    {
        

        if ThrottleStateW = 0
        {
        ThrottleStateW = 1
        }

        SendInput {vk54 down} ; T
    LOOP
        {
        
        sleep 700
        SendInput {vk52 down} ; R
        sleep 70
        SendInput {vk52 up} ; R
        GetKeyState, POVState, JoyPOV
        if POVState &gt; 35
        break
        Return
        }

        
    }

    else if JoyZState &gt; 35 &amp; &lt; 65
    {
        if ThrottleStateW = 1
        {
            SendInput {vk54 Up} ; T
            ThrottleStateW = 0
        }

    }    
    
}
Return

Joy25::
{
}
Return</code></pre></div><p>Этот скрипт написан для джойстика(для игры). Ось определяется в диапазоне 0-100. Но это не суть. Точно так же можно работать с любой другой переменной. Нужно, чтобы когда переменная JoyZState была меньше 35, то кнопка T(vk54) зажималась и не отпускалась до тех пор, пока переменная JoyZState не станет больше 35. И параллельно с этим, когда переменная JoyZState меньше 35, постоянно нажималась кнопка R(vk52) с опр. задержками. Вот как примерно должно выглядеть в блокноте это:<br />tttttttttrtttttttttrtttttttttrtttttttttrtttttttttrtttttttttr<br />А вот как это выглядит на практике:<br />trtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrt<br />Кнопки просто жмутся поочередно.(тоже самое в игре. Они не зажимаются а нажимаются на долю секунды). Кнопка Т не зажимается, а просто нажимается поочередно с кнопкой R.<br />Еще нужно сделать так, чтобы даже если во время выполнения sleep переменная JoyZState становилась больше чем 35, то кнопка T переставала быть зажатой и отпускалась. Как я понимаю, командой SetTimer и LOOP этого не сделать т.к. эти команды заканчивают полностью один цикл и только после этого проверяют, запускать ли следующий цикл. А мне нужно, чтобы даже если во время команды sleep я изменил переменную, то кнопка перестала зажиматься.<br />Еще я заметил, что кнопки мыши как раз работают вроде &quot;как надо&quot;. Они зажимаются с определенными промежутками. Но когда выполняется команда sleep, и я в этом время перемещаю джойстик и переменная JoyZState становится больше 35, то кнопка все равно продолжает быть зажатой аж до конца цикла. Вот почему мне нужна замена LOOP и SetTimer.<br />Я пробовал команды Send, SendInput, SendEvent, SendPlay. Использовал и обычные кнопки и виртуальные коды клавиш. Разницы нет никакой.<br />Есть ли какая-то команда, которая может постоянно мониторить значение переменной и в любой момент времени прервать выполнение программы?<br />В каком направлении мне думать, чтобы написать то что я хочу? Я надеюсь, я доходчиво объяснил, чего я хочу. Это сложно объяснить и сложно понять.<br />Помогите мне, пожалуйста. Я не могу понять, как мне сделать правильно.</p>]]></description>
			<author><![CDATA[null@example.com (bigden)]]></author>
			<pubDate>Fri, 27 Jan 2012 13:45:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56046#p56046</guid>
		</item>
	</channel>
</rss>
