<?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=10120</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10120&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Подсчет длительности нажатия на кнопку».]]></description>
		<lastBuildDate>Fri, 07 Nov 2014 08:05:35 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=88070#p88070</link>
			<description><![CDATA[<p>Пожалуйста. Выводы сделаны верные. )</p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Fri, 07 Nov 2014 08:05:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=88070#p88070</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=88068#p88068</link>
			<description><![CDATA[<p>Спасибо, отлично работает. А можно узнать принцип, по которому вычисляется задержка? Погуглил,&nbsp; но в своих выводах не уверен. Поправьте если я не прав: A_TickCount это время, в течении которого работает система, соответственно задержка между нажатиями вычисляется как разница A_TickCount в момент нажатия и в момент отпускания, так?</p>]]></description>
			<author><![CDATA[null@example.com (NektoN95)]]></author>
			<pubDate>Fri, 07 Nov 2014 07:40:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=88068#p88068</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=88067#p88067</link>
			<description><![CDATA[<p>Например, так:<br /></p><div class="codebox"><pre><code>#SingleInstance
SetBatchLines, -1
gui, +resize
gui, show, w500 h700

sleep 400
click_hunter(&quot;lbutton,rbutton,mbutton&quot;, &quot;key_event&quot;)
msgbox, %key_event_err% - %key_event_posX% - %key_event_posY% - %key_event_keys% - %key_event_period%
return


;click_hunter ожидает нажатие и отпускание одной или нескольких кнопок (arrayCH), 
;возвращает тип нажатия (%var_nameCH%_err)(несколько кнопок одновременно, нажатие со смещением, их комбинацию или обычный клик). 
;Также возвращает координаты (%var_nameCH%_posX, %var_nameCH%_posY) курсора в момент нажатия, а если курсор был смещен, 
;то и в момент отпускания. Кроме того, возвращает имя сработавший кнопки или кнопок (%var_nameCH%_keys).

click_hunter(arrayCH, var_nameCH)
{
    global
    event_hunter(arrayCH, &quot;D&quot;, &quot;mouse_press&quot;)
    %var_nameCH%_period := -A_TickCount 
    StringLeft, proove, mouse_press_state, 15
    if (proove = &quot;toomanycontrols&quot;)
    {
        %var_nameCH%_err := mouse_press_state
        %var_nameCH%_posX := % mouse_press_posX 
        %var_nameCH%_posY := % mouse_press_posY
    }
    
    event_hunter(mouse_press_keys, &quot;U&quot;, &quot;mouse_unpress&quot;)
    %var_nameCH%_period += A_TickCount
    if (mouse_press_posX != mouse_unpress_posX and mouse_press_posY != mouse_unpress_posY) = 1
    {
        if (proove = &quot;toomanycontrols&quot;)
        {
            %var_nameCH%_err := % &quot;cursoroffset,&quot; %var_nameCH%_err 
            %var_nameCH%_posX := % %var_nameCH%_posX &quot;,&quot; mouse_unpress_posX
            %var_nameCH%_posY := % %var_nameCH%_posY &quot;,&quot; mouse_unpress_posY
        }
        else
        {
            %var_nameCH%_err := &quot;cursoroffset&quot;
            %var_nameCH%_posX := % mouse_press_posX &quot;,&quot; mouse_unpress_posX
            %var_nameCH%_posY := % mouse_press_posY &quot;,&quot; mouse_unpress_posY
        }
    }
    if (mouse_press_posX = mouse_unpress_posX and mouse_press_posY = mouse_unpress_posY and proove != &quot;toomanycontrols&quot;) = 1
    {
        %var_nameCH%_err := &quot;normal&quot;
        %var_nameCH%_posX := mouse_press_posX
        %var_nameCH%_posY := mouse_press_posY
    }
    %var_nameCH%_keys := mouse_press_keys
}

;event_hunter Ожидает перехода одного из контролов (Array) 
;в заданное состояние (state_type) и возвращает координаты курсора на момент события (%var_name%_posX, %var_name%_posY)
;и имя сработавший кнопки или кнопок (%var_name%_keys). Также, если сработали две кнопки одновременно,
;переменная %var_name%_state принимает значение &quot;toomanycontrols&quot;, иначе - &quot;normal&quot;

event_hunter(Array, state_type, var_name)
{
    global
    local control_amount
    Loop
    {
        Loop, parse, Array, `,;Разбор массива для проверки
        {
            GetKeyState, state_%A_index%, %A_LoopField%
            if state_%A_index% = %state_type%
                {
                control_amount += 1
                if control_amount &gt; 1
                returned := % returned &quot;,&quot; A_LoopField 
                else
                returned := A_LoopField
                }
        }
            if control_amount &gt; 1
                {
                %var_name%_state := &quot;toomanycontrols&quot;
                %var_name%_keys := returned
                }
            else if control_amount = 1
                {
                %var_name%_keys := returned
                %var_name%_state := &quot;normal&quot;
                }
            else
                %var_name%_state := &quot;false&quot;
            MouseGetPos, posX, posY
            %var_name%_posX := posX
            %var_name%_posY := posY
            if (%var_name%_state != &quot;false&quot;)
                break
            else
            {
                sleep 1
                continue
            }
    }
}
guiclose:
exitapp
return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Fri, 07 Nov 2014 07:08:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=88067#p88067</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=88066#p88066</link>
			<description><![CDATA[<p>Эээ, наверное непонятно выразился, имеется в виду длительность нажатия.</p>]]></description>
			<author><![CDATA[null@example.com (NektoN95)]]></author>
			<pubDate>Fri, 07 Nov 2014 06:41:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=88066#p88066</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=88064#p88064</link>
			<description><![CDATA[<p>Есть функция, отслеживающая нажатие одной из заданных кнопок, координаты курсора, название нажатой кнопки (или кнопок) и тип нажатия (обычное, со смещением курсора, одновременное на несколько кнопок). Вот код:</p><div class="codebox"><pre><code>#SingleInstance
SetBatchLines, -1
gui, +resize
gui, show, w500 h700

sleep 400
Loop
{
click_hunter(&quot;lbutton,rbutton,mbutton&quot;, &quot;key_event&quot;)
msgbox, %key_event_err% - %key_event_posX% - %key_event_posY% - %key_event_keys%
}
return


;click_hunter ожидает нажатие и отпускание одной или нескольких кнопок (arrayCH), 
;возвращает тип нажатия (%var_nameCH%_err)(несколько кнопок одновременно, нажатие со смещением, их комбинацию или обычный клик). 
;Также возвращает координаты (%var_nameCH%_posX, %var_nameCH%_posY) курсора в момент нажатия, а если курсор был смещен, 
;то и в момент отпускания. Кроме того, возвращает имя сработавший кнопки или кнопок (%var_nameCH%_keys).

click_hunter(arrayCH, var_nameCH)
{
    global
    event_hunter(arrayCH, &quot;D&quot;, &quot;mouse_press&quot;)
    StringLeft, proove, mouse_press_state, 15
    if (proove = &quot;toomanycontrols&quot;)
    {
        %var_nameCH%_err := mouse_press_state
        %var_nameCH%_posX := % mouse_press_posX 
        %var_nameCH%_posY := % mouse_press_posY
    }
    
    event_hunter(mouse_press_keys, &quot;U&quot;, &quot;mouse_unpress&quot;)
    if (mouse_press_posX != mouse_unpress_posX and mouse_press_posY != mouse_unpress_posY) = 1
    {
        if (proove = &quot;toomanycontrols&quot;)
        {
            %var_nameCH%_err := % &quot;cursoroffset,&quot; %var_nameCH%_err 
            %var_nameCH%_posX := % %var_nameCH%_posX &quot;,&quot; mouse_unpress_posX
            %var_nameCH%_posY := % %var_nameCH%_posY &quot;,&quot; mouse_unpress_posY
        }
        else
        {
            %var_nameCH%_err := &quot;cursoroffset&quot;
            %var_nameCH%_posX := % mouse_press_posX &quot;,&quot; mouse_unpress_posX
            %var_nameCH%_posY := % mouse_press_posY &quot;,&quot; mouse_unpress_posY
        }
    }
    if (mouse_press_posX = mouse_unpress_posX and mouse_press_posY = mouse_unpress_posY and proove != &quot;toomanycontrols&quot;) = 1
    {
        %var_nameCH%_err := &quot;normal&quot;
        %var_nameCH%_posX := mouse_press_posX
        %var_nameCH%_posY := mouse_press_posY
    }
    %var_nameCH%_keys := mouse_press_keys
}

;event_hunter Ожидает перехода одного из контролов (Array) 
;в заданное состояние (state_type) и возвращает координаты курсора на момент события (%var_name%_posX, %var_name%_posY)
;и имя сработавший кнопки или кнопок (%var_name%_keys). Также, если сработали две кнопки одновременно,
;переменная %var_name%_state принимает значение &quot;toomanycontrols&quot;, иначе - &quot;normal&quot;

event_hunter(Array, state_type, var_name)
{
    global
    local control_amount
    Loop
    {
        Loop, parse, Array, `,;Разбор массива для проверки
        {
            GetKeyState, state_%A_index%, %A_LoopField%
            if state_%A_index% = %state_type%
                {
                control_amount += 1
                if control_amount &gt; 1
                returned := % returned &quot;,&quot; A_LoopField 
                else
                returned := A_LoopField
                }
        }
            if control_amount &gt; 1
                {
                %var_name%_state := &quot;toomanycontrols&quot;
                %var_name%_keys := returned
                }
            else if control_amount = 1
                {
                %var_name%_keys := returned
                %var_name%_state := &quot;normal&quot;
                }
            else
                %var_name%_state := &quot;false&quot;
            MouseGetPos, posX, posY
            %var_name%_posX := posX
            %var_name%_posY := posY
            if (%var_name%_state != &quot;false&quot;)
                break
            else
            {
                sleep 1
                continue
            }
    }
}
guiclose:
exitapp
return
</code></pre></div><p>Нужно каким-то образом отследить время нажатия на кнопку (разумеется, не мешая исполнению уже имеющимся командам скрипта).&nbsp; Есть у кого нибудь идеи, как это сделать?</p>]]></description>
			<author><![CDATA[null@example.com (NektoN95)]]></author>
			<pubDate>Fri, 07 Nov 2014 05:33:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=88064#p88064</guid>
		</item>
	</channel>
</rss>
