<?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=16354</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16354&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Залипание при недолгом нажатии клавиши.».]]></description>
		<lastBuildDate>Sun, 16 May 2021 00:53:44 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147902#p147902</link>
			<description><![CDATA[<p>Сварганил интерфейс с настройками:</p><div class="codebox"><pre><code>#SingleInstance Force	;16.05.2021	http://forum.script-coding.com/viewtopic.php?id=16354
#NoEnv
SetBatchLines -1
;-----------
Global Info, Info := {}
;-----------
Gui +Caption +LastFound +SysMenu +ToolWindow +AlwaysOnTop
Gui Color, 0x997799
Gui Add, Button, vBT gSW x115 y40 w70 h23, Запуск
Gui Add, Edit, vKeys x64 y8 w120 h21, Все
Gui Add, Text, x8 y8 w50 h23 +0x200, Клавиши:
Gui Add, Edit, vDelay x72 y40 w40 h21 +Number, 2000
Gui Add, Text, x8 y40 w55 h23, Задержка:
Gui Show, w191 h66, [Авто-нажатие клавиш]
Return
;-----------
GuiEscape:
GuiClose:
ExitApp
;-----------
SW:
Gui, Submit, NoHide
If (SW := !SW){
 Info[&quot;Delay&quot;] := Delay
 Hook := InputHook(&quot;V&quot;)
 If (Keys = &quot;Все&quot;)
  Keys = {All}
 Hook.KeyOpt(Keys, &quot;N&quot;)
 Hook.OnKeyDown := Func(&quot;OnKeyDown&quot;)
 Hook.OnKeyUp := Func(&quot;OnKeyUp&quot;)
 Hook.Start()
 GuiControl,, BT, Стоп
 GuiControl, Disable, Keys
 GuiControl, Disable, Delay
}
Else{
 Hook.Stop()
 GuiControl,, BT, Запуск
 GuiControl, Enable, Keys
 GuiControl, Enable, Delay
}
Return
;-----------
OnKeyDown(Hook, vk, sc) {
 if !Info[vk . sc]
  Info[vk . sc] := A_TickCount
 else if (!Info.timer &amp;&amp; A_TickCount - Info[vk . sc] &gt; Info.delay) {
  Timer := Info.timer := Func(&quot;SendKey&quot;).Bind( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
  SetTimer, % Timer, 30
  SoundBeep
 }
}

OnKeyUp(Hook, vk, sc) {
 if !Info.timer
  Info[vk . sc] := &quot;&quot;
 else {
  if !Info.once
   Info.once := true
  else {
   Timer := Info.timer
   SetTimer, % Timer, Delete
   Info[vk . sc] := Info.once := Info.timer := &quot;&quot;
   Sleep, 30
   Send % &quot;{&quot; . Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) . &quot; Up}&quot;
  }
 }
}

SendKey(key){
 Send {%key% Down}
}

;-----------
F4:: ExitApp
F6:: Reload</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sun, 16 May 2021 00:53:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147902#p147902</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147901#p147901</link>
			<description><![CDATA[<p>Не вижу особого геморроя. Когда вместо того, чтобы делать переменную глобальной, она передаётся через параметр, то сразу понятно, откуда она взялась и как тут появилась. Когда код большой, это может быть критично.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 16 May 2021 00:07:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147901#p147901</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147900#p147900</link>
			<description><![CDATA[<p>Снова отсылка на то, что глобальные переменные = зло?<br />Но тут лишний геморрой с установкой массива &#039;Info&#039; в функции.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sun, 16 May 2021 00:03:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147900#p147900</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147898#p147898</link>
			<description><![CDATA[<p>Немного подправил код, переменная <em>sticky</em> лишней оказалась.<br /><em>Bind</em> здесь используется для того, чтобы передать лишний параметр в <em>OnKeyDown</em> и <em>OnKeyUp</em>. Изначально там по <a href="https://www.autohotkey.com/docs/commands/InputHook.htm#OnKeyDown">три</a> параметра:<br /></p><div class="quotebox"><blockquote><p>The function is passed the following parameters: InputHook, VK, SC</p></blockquote></div><p>Я с помощью <em>Bind</em> передаю ещё один — объект <em>Info</em>, в который записываются данные. Параметры, передаваемые с помощью <em>Bind</em>, помещаются перед остальными параметрами:<br /></p><div class="codebox"><pre><code>OnKeyUp(Info, Hook, vk, sc)</code></pre></div><p>Вместо этого можно было бы объявить объект <em>Info</em> глобальным.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 15 May 2021 23:53:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147898#p147898</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147896#p147896</link>
			<description><![CDATA[<p>В целом, разбирая логику вашего кода становится понятно что и как устроено.<br />Разве что про &#039;.Bind&#039; хотелось бы узнать побольше.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sat, 15 May 2021 23:38:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147896#p147896</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147895#p147895</link>
			<description><![CDATA[<p><strong>__Михаил__</strong>, давайте по порядку, я так не понимаю, на что отвечать. Что первое не понятно?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 15 May 2021 23:28:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147895#p147895</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147894#p147894</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Как применить я понял сразу - &#039;{All}&#039; мне известно давно, ещё когда изучал этот тип перехвата в своей <a href="http://forum.script-coding.com/viewtopic.php?id=15713">теме</a>.<br />Другое дело, что используется таймер, но через использование объекта / функции. Да ещё и &#039;.Bind&#039; который я так понимаю указывает параметры для вызова в функции что будет выполняться.<br />Чтобы собрать такую конструкцию нужно понимать как это всё работает, только вот где про это нормально написано? В стандартной справке есть один пример, да и то через Класс.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sat, 15 May 2021 23:10:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147894#p147894</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147893#p147893</link>
			<description><![CDATA[<p><strong>SHOX</strong><br />Рассчитано только для клавиш мыши (ЛКМ и ПКМ).</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sat, 15 May 2021 22:47:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147893#p147893</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147892#p147892</link>
			<description><![CDATA[<p>Рад помочь! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 15 May 2021 21:40:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147892#p147892</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147891#p147891</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Очень благодарен! Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (SHOX)]]></author>
			<pubDate>Sat, 15 May 2021 21:38:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147891#p147891</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147890#p147890</link>
			<description><![CDATA[<p>Замените {All} на клавишу/список клавиш, которые нужны, как описано <a href="https://www.autohotkey.com/docs/commands/InputHook.htm#KeyOpt">здесь</a>. Например, для клавиш a, b, и c так:<br /></p><div class="codebox"><pre><code>Hook.KeyOpt(&quot;abc&quot;, &quot;N&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 15 May 2021 21:29:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147890#p147890</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147889#p147889</link>
			<description><![CDATA[<p><strong>__Михаил__</strong> Спасибо большое за попытку но к сожалению как то не работает.<br /><strong>teadrinker</strong> Спасибо. Ваш код работает как нужно. Единственно можно как-то его применить к определенной кнопке а не на всю клавиатуру сразу?</p>]]></description>
			<author><![CDATA[null@example.com (SHOX)]]></author>
			<pubDate>Sat, 15 May 2021 21:17:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147889#p147889</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147888#p147888</link>
			<description><![CDATA[<p>Просто запустите скрипт, откройте блокнот, удерживайте любую печатную клавишу в течение двух секунд (до сигнала SoundBeep).</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 15 May 2021 20:42:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147888#p147888</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147887#p147887</link>
			<description><![CDATA[<p>Слишком сложно для понимания.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sat, 15 May 2021 20:23:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147887#p147887</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Залипание при недолгом нажатии клавиши.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=147885#p147885</link>
			<description><![CDATA[<p>Для клавиатуры так можно:<br /></p><div class="codebox"><pre><code>Info := {delay: 2000}

Hook := InputHook(&quot;V&quot;)
Hook.KeyOpt(&quot;{All}&quot;, &quot;N&quot;)
Hook.OnKeyDown := Func(&quot;OnKeyDown&quot;).Bind(Info)
Hook.OnKeyUp := Func(&quot;OnKeyUp&quot;).Bind(Info)
Hook.Start()
Return

OnKeyDown(Info, Hook, vk, sc) {
   if !Info[vk . sc]
      Info[vk . sc] := A_TickCount
   else if (!Info.timer &amp;&amp; A_TickCount - Info[vk . sc] &gt; Info.delay) {
      Timer := Info.timer := Func(&quot;SendKey&quot;).Bind( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
      SetTimer, % Timer, 30
      SoundBeep
   }
}

OnKeyUp(Info, Hook, vk, sc) {
   if !Info.timer
      Info[vk . sc] := &quot;&quot;
   else {
      if !Info.once
         Info.once := true
      else {
         Timer := Info.timer
         SetTimer, % Timer, Delete
         Info[vk . sc] := Info.once := Info.timer := &quot;&quot;
         Sleep, 30
         Send % &quot;{&quot; . Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) . &quot; Up}&quot;
      }
   }
}

SendKey(key) {
   Send {%key% Down}
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 15 May 2021 20:06:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=147885#p147885</guid>
		</item>
	</channel>
</rss>
