<?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=490</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=490&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Разные действия для одиночного и двойного нажатия клавиши».]]></description>
		<lastBuildDate>Thu, 29 Jan 2009 19:05:39 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Разные действия для одиночного и двойного нажатия клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18925#p18925</link>
			<description><![CDATA[<p>Пример обработки двойного клика мышью:<br /></p><div class="codebox"><pre><code>starttime := A_TickCount
doubleclick:=0

~Lbutton::
elapsedtime := A_TickCount - starttime
IF (elapsedtime &lt; 250) and (doubleclick=1)
    {
    ; Сюда помещаем нужные действия.
    soundbeep, 1000, 50
    doubleclick:=0
    }
else
    {
    soundbeep, 1400, 50
    doubleclick := 1
    }
starttime := A_TickCount
return

f12::exitapp</code></pre></div><p>Автор примера — <strong>ypppu</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Thu, 29 Jan 2009 19:05:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18925#p18925</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Разные действия для одиночного и двойного нажатия клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=3040#p3040</link>
			<description><![CDATA[<p>Под двойным нажатием подразумевается быстрое нажатие клавиши 2 раза, наподобие двойного щелчка мыши. С помощью этого приёма можно, например, расширить возможности функциональных клавиш.<br />В общем, никакой Америки я тут не открываю, способ давно известен, просто выделил общую часть кода, чтобы не прописывать одно и то же для каждой клавиши.</p><p>В том виде, как здесь, скрипт требует по крайней мере версию 1.0.46.16, т.к. использует добавленную там возможность - одноразовый таймер. Теперь, если время таймера задать со знаком минус, он сработает только один раз, что очень удобно в некоторых случаях.</p><p>Почему я применил таймеры, а не просто переходы к меткам: потому что таймер запускает свою подпрограмму как отдельный поток, таким образом процедура счётчика не должна ждать её окончания и сразу же освобождается для обработки нажатий других клавиш.</p><p>Само собой, круглые скобки в F11(1): - это не вызов функции, а просто часть имени метки. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><br /><br /><div class="codebox"><pre><code>#UseHook, On   ; Предосторожность на случай, если клавиша должна будет
               ; посылать саму себя. Делает то же, что префикс $, только
               ; для всех гор. клавиш, которые ниже.


;----- Пример для клавиши F11 -----------

F11:: Gosub, PressCount            ; Запускается счётчик нажатий.

F11(1):                            ; Код для одиночного нажатия F11.
  Msgbox, F11 нажата 1 раз.
Return

F11(2):                            ; Код для двойного нажатия F11.
  Msgbox, F11 нажата 2 раза.
Return

;----- Пример для правой кнопки мыши ----

RButton:: Gosub, PressCount

RButton(1):                        ; Одиночный действует как и раньше (почти,
  Click Down Right                 ; т.к. пауза иногда даёт о себе знать при 
  KeyWait, RButton                 ; перетаскивании правой кнопкой).
  Click Up Right
Return

RButton(2):
  ToolTip, Двойной правый щелчок.
  Sleep, 1000
  ToolTip
Return

;-----------------------------------------

#UseHook, Off



;----- Общая часть кода (счётчик нажатий) ------

PressCount:
  Pause_=300     ; Если пауза меньше этого количества миллисекунд, то нажатие
                 ; двойное. Если больше, то оно расценивается как 2 одиночных.
  If not Second
  {
    Second=1
    SetTimer, DoublePress, -%Pause_%
  }
  Else
  {
    Second=0
    SetTimer, %A_ThisHotkey%(2), -1
  }
Return

DoublePress:
  If not Second
    Return
  Second=0
  SetTimer, %A_ThisHotkey%(1), -1
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 04 Jun 2007 14:19:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=3040#p3040</guid>
		</item>
	</channel>
</rss>
