<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6736&amp;type=atom" />
	<updated>2012-01-28T12:37:50Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6736</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56071#p56071" />
			<content type="html"><![CDATA[<p>В <br /></p><div class="codebox"><pre><code>If (JoyZState &gt; 35)
Return</code></pre></div><p>Нет необходимости. Более ничем помочь не могу.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-01-28T12:37:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56071#p56071</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56070#p56070" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[bigden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27472</uri>
			</author>
			<updated>2012-01-28T12:26:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56070#p56070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56047#p56047" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-01-27T14:54:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56047#p56047</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Нажатия кнопок параллельно друг другу с опр. задержками(SetTimer)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56046#p56046" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[bigden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27472</uri>
			</author>
			<updated>2012-01-27T13:45:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56046#p56046</id>
		</entry>
</feed>
