<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Подсчет длительности нажатия на кнопку]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10120&amp;type=atom" />
	<updated>2014-11-07T08:05:35Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10120</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88070#p88070" />
			<content type="html"><![CDATA[<p>Пожалуйста. Выводы сделаны верные. )</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-11-07T08:05:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88070#p88070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88068#p88068" />
			<content type="html"><![CDATA[<p>Спасибо, отлично работает. А можно узнать принцип, по которому вычисляется задержка? Погуглил,&nbsp; но в своих выводах не уверен. Поправьте если я не прав: A_TickCount это время, в течении которого работает система, соответственно задержка между нажатиями вычисляется как разница A_TickCount в момент нажатия и в момент отпускания, так?</p>]]></content>
			<author>
				<name><![CDATA[NektoN95]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32518</uri>
			</author>
			<updated>2014-11-07T07:40:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88068#p88068</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88067#p88067" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-11-07T07:08:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88067#p88067</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88066#p88066" />
			<content type="html"><![CDATA[<p>Эээ, наверное непонятно выразился, имеется в виду длительность нажатия.</p>]]></content>
			<author>
				<name><![CDATA[NektoN95]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32518</uri>
			</author>
			<updated>2014-11-07T06:41:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88066#p88066</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Подсчет длительности нажатия на кнопку]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88064#p88064" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[NektoN95]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32518</uri>
			</author>
			<updated>2014-11-07T05:33:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88064#p88064</id>
		</entry>
</feed>
