<?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=16576</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16576&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Срабатывание при нажатии определенной комбинации с запоминанием».]]></description>
		<lastBuildDate>Thu, 16 Sep 2021 18:39:00 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149551#p149551</link>
			<description><![CDATA[<p>Во-первых, чтобы присвоить переменной пустой массив, нужно использовать знак <strong>:=</strong>, а не <strong>=</strong>, иначе вы присваиваете не массив, а буквальный текст <strong>[]</strong>:<br /></p><div class="codebox"><pre><code>var = []
MsgBox, % var</code></pre></div><p>Во-вторых, массив тут не особо нужен, легче пользоваться простой строкой символов (именно символов, точнее, названий нажатых клавиш, а не их vk), просто добавляя последний в конец. Определить, что в конце строки нужная комбинация (13 цифр + Enter), можно через RegExMatch:<br /></p><div class="codebox"><pre><code>str := &quot;abcd0123456789012Enter&quot;
if RegExMatch(str, &quot;\d{13}Enter$&quot;)
   MsgBox, В конце строки 13 цифр и Enter</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 16 Sep 2021 18:39:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149551#p149551</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149547#p149547</link>
			<description><![CDATA[<p>Когда массив размером 14, то:<br />-Если в 14 ячейке 13, а в 1 по 13 ячейках от 48, до 57 (включительно): {F7} + перебор всего массива.<br />-Иначе очистить массив.<br />&quot;а в 1 по 13 ячейках от 48, до 57 (включительно)&quot; - или в ячейках не число 13</p>]]></description>
			<author><![CDATA[null@example.com (jerry33)]]></author>
			<pubDate>Thu, 16 Sep 2021 07:25:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149547#p149547</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149508#p149508</link>
			<description><![CDATA[<p>Опишите словами алгоритм, который пытались реализовать в скрипте.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 11 Sep 2021 22:32:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149508#p149508</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149505#p149505</link>
			<description><![CDATA[<p>Подскажите, где я ошибся?<br /></p><div class="codebox"><pre><code>global Array := []
Hook := InputHook(&quot;V&quot;)
Hook.KeyOpt(&quot;{All}&quot;, &quot;N&quot;)
Hook.OnKeyDown := Func(&quot;OnKeyDown&quot;)
Hook.OnKeyUp := Func(&quot;OnKeyUp&quot;)
Hook.Start()
Return

OnKeyDown(hook, vk, sc) {
   ;ToolTip % &quot;Нажата клавиша: &quot; . GetKeyName( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
   ;ToolTip % &quot;Нажата клавиша: &quot; . sc 
   if (vk ~= &quot;48|49|50|51|52|53|54|55|56|57|13&quot;){
      Array.Push(vk)
      while Array.MaxIndex() &gt; 15 { ;Array.Count()
         Array.RemoveAt(1, 1)
      }
      if (Array.MaxIndex() = 14) {
      for index, element in Array
      {
         if (index &lt; 14) &amp;&amp; (element &lt; 47 || element &gt; 58) {
            Array = []
         } else if (index = 14) &amp;&amp; (element != 13) {
            Array = []
         } else {
            ToolTip % Array[Array.MaxIndex()]
         }
      }
      }
   }
   Else {
       Array = []
   }
   ;ToolTip % Array[Array.MaxIndex()] Array.MaxIndex()
   SetTimer, RemoveToolTip, -5000
}

OnKeyUp(hook, vk, sc) {
   ;ToolTip % &quot;Отпущена клавиша: &quot; . GetKeyName( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
   ;SetTimer, RemoveToolTip, -2000
   ;ToolTip % Array[1]
   ;if (vk = 13){
   ;   Array := []
   ;}
}

RemoveToolTip:
ToolTip
return</code></pre></div><p>Array[1-13] - это индекс с 1 по 13.</p>]]></description>
			<author><![CDATA[null@example.com (jerry33)]]></author>
			<pubDate>Sat, 11 Sep 2021 16:57:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149505#p149505</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149504#p149504</link>
			<description><![CDATA[<p>А что значит Array[1-13] ?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 11 Sep 2021 16:55:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149504#p149504</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149503#p149503</link>
			<description><![CDATA[<p>Разобрался! Спасибо.<br />Исправленный вариант:<br /></p><div class="codebox"><pre><code>
global Array := []
Hook := InputHook(&quot;V&quot;)
Hook.KeyOpt(&quot;{All}&quot;, &quot;N&quot;)
Hook.OnKeyDown := Func(&quot;OnKeyDown&quot;)
Hook.OnKeyUp := Func(&quot;OnKeyUp&quot;)
Hook.Start()
Return

OnKeyDown(hook, vk, sc) {
   ;ToolTip % &quot;Нажата клавиша: &quot; . GetKeyName( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
   ;ToolTip % &quot;Нажата клавиша: &quot; . sc 
   if (vk ~= &quot;48|49|50|51|52|53|54|55|56|57|13&quot;){
      Array.Push(vk)
      while Array.MaxIndex() &gt; 14 { ;Array.Count()
         Array.RemoveAt(1, 1)
      }
      ;if ....  
   }
   Else {
       Array := []
   }
   ToolTip % Array[Array.MaxIndex()] Array.MaxIndex()
   SetTimer, RemoveToolTip, -5000
}

OnKeyUp(hook, vk, sc) {
   ;ToolTip % &quot;Отпущена клавиша: &quot; . GetKeyName( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
   ;SetTimer, RemoveToolTip, -2000
   ;ToolTip % Array[1]
   ;if (vk = 13){
   ;   Array := []
   ;}
}

RemoveToolTip:
ToolTip
return
</code></pre></div><p>Такой вопрос: Как проверить каждый элемент массива на нужное мне условие? (На данный момент только IF знаю, но наверное можно как-то компактнее..)<br />Условие: Array[14] = 13 всегда, а Array[1-13] = 48 - 57<br />+++<br />Даже по другому: Array[14] = 13 всегда, Array[1-13] не ровно 13</p>]]></description>
			<author><![CDATA[null@example.com (jerry33)]]></author>
			<pubDate>Sat, 11 Sep 2021 15:48:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149503#p149503</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149501#p149501</link>
			<description><![CDATA[<p>А зачем вы vk в квадратные скобки взяли?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 11 Sep 2021 13:37:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149501#p149501</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149500#p149500</link>
			<description><![CDATA[<p>Можно подсказку: где объявлять переменную, что-бы функция имела к ней доступ?<br />Не понимаю, почему ==ToolTip % Array[1]== в первом случае срабатывает, как и ожидается, а во втором (внутри функции) - ни как...</p><div class="codebox"><pre><code>
Array := []
Array.Push(50)
ToolTip % Array[1]
SetTimer, RemoveToolTip, -5000
Hook := InputHook(&quot;V&quot;)
Hook.KeyOpt(&quot;{All}&quot;, &quot;N&quot;)
Hook.OnKeyDown := Func(&quot;OnKeyDown&quot;)
Hook.OnKeyUp := Func(&quot;OnKeyUp&quot;)
Hook.Start()
Return

OnKeyDown(hook, vk, sc) {
   ;ToolTip % &quot;Нажата клавиша: &quot; . GetKeyName( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
   Array.Push([vk])
   ToolTip % Array[1]
   SetTimer, RemoveToolTip, -5000
}

OnKeyUp(hook, vk, sc) {
   ;ToolTip % &quot;Отпущена клавиша: &quot; . GetKeyName( Format(&quot;vk{:x}sc{:x}&quot;, vk, sc) )
   ;SetTimer, RemoveToolTip, -2000
}

RemoveToolTip:
ToolTip
return
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (jerry33)]]></author>
			<pubDate>Sat, 11 Sep 2021 13:08:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149500#p149500</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149492#p149492</link>
			<description><![CDATA[<p>Следить за нажатиями клавиш удобно через <a href="https://www.autohotkey.com/docs/commands/InputHook.htm">InputHook()</a>. Сохранять нажатые клавиши можно в массив в момент нажатия, и удалять из массива в момент отжатия.<br /><a href="https://forum.script-coding.com/viewtopic.php?pid=149411#p149411">Вот пример</a> использования InputHook().</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 08 Sep 2021 18:24:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149492#p149492</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149490#p149490</link>
			<description><![CDATA[<p>Нет, всегда разные, одинаково только их кол-во и Enter в конце.<br />(Но интересен вариант и с одной комбинацией. Что-то типа скрытого кода на компьютере. Это лучше в следующих сообщениях обсудить ;-) )<br />Или вопрос по другому можно поставить:<br />Как сделать, что бы AHK помнил последние несколько нажатий?<br />Пример: было 4 нажатия - 1,3,3,2 =&gt; AHK их запомнил 1332<br />Нажимаешь 5 =&gt; теперь AHK помнит 3325<br />Нажимаешь 7 =&gt; теперь AHK помнит 3257<br />И так далее..</p><p>Как я это представляю на словах: AHK следит за нажатиями клавиш, если это цифра - записывает в переменную (буфер объемом в Х символов).<br />Нажимается Enter - если в буфере X цифр, то F7+вывод буфера+Enter<br />Если нажимается всё остальное - буфер очищается.</p>]]></description>
			<author><![CDATA[null@example.com (jerry33)]]></author>
			<pubDate>Wed, 08 Sep 2021 10:38:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149490#p149490</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149489#p149489</link>
			<description><![CDATA[<p>Цифры всегда одни и те же?</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Wed, 08 Sep 2021 10:26:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149489#p149489</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Срабатывание при нажатии определенной комбинации с запоминанием]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149488#p149488</link>
			<description><![CDATA[<p>Всем привет. Есть такие условия:<br />Идёт набор 13 цифр (меньше секунды) и нажимается Enter.</p><p>Что должно получиться:<br />Если идёт последовательное нажатие 13 цифр + Enter - то нажимается F7 + 13 цифр + Enter.</p><p>Подскажите, как это реализовать?<br />Отслеживать, когда нажимается цифра и если да, то следующая цифра, если да, то .. и так далее?<br />Или есть более компактный способ?</p>]]></description>
			<author><![CDATA[null@example.com (jerry33)]]></author>
			<pubDate>Wed, 08 Sep 2021 09:10:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149488#p149488</guid>
		</item>
	</channel>
</rss>
