<?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=490&amp;type=atom" />
	<updated>2009-01-29T19:05:39Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=490</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Разные действия для одиночного и двойного нажатия клавиши]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=18925#p18925" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2009-01-29T19:05:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=18925#p18925</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Разные действия для одиночного и двойного нажатия клавиши]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=3040#p3040" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2007-06-04T14:19:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=3040#p3040</id>
		</entry>
</feed>
