<?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=15272</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15272&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Скрипт от ложных нажатий клавиатуры».]]></description>
		<lastBuildDate>Fri, 03 Apr 2020 17:58:38 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138829#p138829</link>
			<description><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>lukyan, вот так будет с сохранением вашей логики:</p></blockquote></div><p>Круто, спасибо, скрипт работает.</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Fri, 03 Apr 2020 17:58:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138829#p138829</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138816#p138816</link>
			<description><![CDATA[<p>lukyan, вот так будет с сохранением вашей логики:</p><div class="codebox"><pre><code>delay := 300 ; промежуток времени c предыдущего нажатия, в котором следующее нажатие считается повторным
nFalseRepeat := 2 ; кол-во повторных нажатий после первого, которые будут отфильтрованы
for k in concatenateAssocArrays(range(6, 158), range(160, 190)) { ; диапазоны vk-кодов клавиатуры
	Hotkey If, isFalsePressRepeat()
	Hotkey % Format(&quot;*vk{:X}&quot;, k), Block
}
Return

#If isFalsePressRepeat()
isFalsePressRepeat() {
	global nFalseRepeat, delay
	static pressCount := 0, _PriorHotkey, _TimeSincePriorHotkey := A_TickCount
	if ((_PriorHotkey = A_ThisHotkey) &amp;&amp; (A_TickCount-_TimeSincePriorHotkey &lt; delay))
		block := inRange(1, ++pressCount, nFalseRepeat) ? true : false
	else
		pressCount := 0
	_PriorHotkey := A_ThisHotkey, _TimeSincePriorHotkey := A_TickCount
	Return block
}

Block() {
}

inRange(rangeLow, x, rangeHigh) {
	Return (x&gt;=rangeLow &amp;&amp; x&lt;=rangeHigh)
}

concatenateAssocArrays(arrs*) {
	sumArr := []
	for index, arr in arrs
		for k, v in arr
			sumArr.InsertAt(k, v)
	Return sumArr
}

range(start, stop:=&quot;&quot;, step:=1) {
	static range := { _NewEnum: Func(&quot;_RangeNewEnum&quot;) }
	if !step
		throw &quot;range(): Parameter &#039;step&#039; must not be 0 or blank&quot;
	if (stop == &quot;&quot;)
		stop := start, start := 0
	; Formula: r[i] := start + step*i ; r = range object, i = 0-based index
	; For a postive &#039;step&#039;, the constraints are i &gt;= 0 and r[i] &lt; stop
	; For a negative &#039;step&#039;, the constraints are i &gt;= 0 and r[i] &gt; stop
	; No result is returned if r[0] does not meet the value constraint
	if (step &gt; 0 ? start &lt; stop : start &gt; stop) ;// start == start + step*0
		return { base: range, start: start, stop: stop, step: step }
}
_RangeNewEnum(r) {
	static enum := { &quot;Next&quot;: Func(&quot;_RangeEnumNext&quot;) }
	return { base: enum, r: r, i: 0 }
}
_RangeEnumNext(enum, ByRef k, ByRef v:=&quot;&quot;) {
	stop := enum.r.stop, step := enum.r.step
	, k := enum.r.start + step*enum.i
	if (ret := step &gt; 0 ? k &lt; stop : k &gt; stop)
		enum.i += 1
	return ret
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Thu, 02 Apr 2020 16:34:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138816#p138816</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138814#p138814</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Супер! Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Thu, 02 Apr 2020 14:55:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138814#p138814</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138811#p138811</link>
			<description><![CDATA[<p>Скрипт, как я уже сказал выше, запускается без всякого события, просто после загрузки выполняется весь код и скрипт продолжает висеть в памяти.<br />Команда Hotkey динамически создаёт горячую клавишу. Например, можно создать горячую клавишу Alt + C так:<br /></p><div class="codebox"><pre><code>!c:: MsgBox, % A_ThisHotkey</code></pre></div><p>А можно с помощью команды Hotkey:<br /></p><div class="codebox"><pre><code>Hotkey, !c, Label, On
Return

Label:
   MsgBox, % A_ThisHotkey
   Return</code></pre></div><p>Кроме того, с помощью команды Hotkey можно создать контекст запуска горячей клавиши. Обычный способ:<br /></p><div class="codebox"><pre><code>#If WinActive(&quot;ahk_class Notepad&quot;)
!c:: MsgBox, % A_ThisHotkey</code></pre></div><p>Используя Hotkey:<br /></p><div class="codebox"><pre><code>Hotkey, If, WinActive(&quot;ahk_class Notepad&quot;)
Hotkey, !c, Label, On
Return

Label:
   MsgBox, % A_ThisHotkey
   Return
   
#If WinActive(&quot;ahk_class Notepad&quot;)</code></pre></div><p>При этом в коде где-то обязательно должна присутствовать обычная запись того же контекста (последняя строка).<br />Немного подправленный код скрипта с комментариями:<br /></p><div class="codebox"><pre><code>delay := 200

Hotkey, If, TimeTest(delay) ; создаём контекст для всех созданных ниже горячих клавиш
                            ; контекст заключается в том, что клавиши будут срабатывать
                            ; только если функция TimeTest() вернёт true
Loop 249 { ; создаём горячие клавиши на все возможные виртуальные коды, т. е. на всю клавиатуру
   key := Format(&quot;*vk{:X}&quot;, A_Index + 6)
   Hotkey, % key, Stop, On ; если выполнится вышеуказанный контекст
}                          ; горячая клавиша выполит свою метку Stop и больше ничего не будет делать

Stop() { ; метка Stop, которая ничего не делает, т. е. просто блокирует клавишу
}

TimeTest(delay) { ; функция, проверяющая, прошёл ли таймаут с прошлого нажатия
   static prevKey, prevTime
   time := A_TickCount
   if (A_ThisHotkey = prevKey &amp;&amp; (time - prevTime) &lt; delay)
      stop := true ; если таймаут не прошёл, stop будет равно true, если прошёл — пустому значению
   prevKey := A_ThisHotkey, prevTime := time
   Return stop
}

#If TimeTest(delay) ; запись контекта в обычной форме (требование синтаксиса)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 02 Apr 2020 10:48:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138811#p138811</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138808#p138808</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Что такое виртуальный код клавиши знаете? Если нет, почитайте об этом, иначе трудно будет пояснить.</p></blockquote></div><p>Примерно понимаю.<br />Мне не понятно по какому события запускается скрипт. Или он выполняется постоянно? Основное тело программы - это цикл?<br />Не понятно что делают команды HotKey. Хоть описание вы и скинули (и я его и раньше видел), но не очень доходит как она отрабатывают.</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Thu, 02 Apr 2020 07:16:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138808#p138808</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138802#p138802</link>
			<description><![CDATA[<p>Что такое виртуальный код клавиши знаете? Если нет, почитайте об этом, иначе трудно будет пояснить.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 01 Apr 2020 23:07:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138802#p138802</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138801#p138801</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Так а зачем сомневаться или не сомневаться, можно же просто протестировать.</p></blockquote></div><p>Если вам не сильно сложно, расскажите логику работы скрипта - это будет гораздо полезнее чем просто рабочая и не понятная программа.</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Wed, 01 Apr 2020 22:59:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138801#p138801</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138778#p138778</link>
			<description><![CDATA[<p>Так а зачем сомневаться или не сомневаться, можно же просто протестировать.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 01 Apr 2020 16:30:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138778#p138778</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138774#p138774</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Он начинает работу сразу после загрузки. Вы его запускали?</p></blockquote></div><p>Я не сомневаюсь что он работает. Но важно еще и понимать как он работает.<br />Он будет работать в бесконечном цикле?</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Wed, 01 Apr 2020 16:23:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138774#p138774</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138763#p138763</link>
			<description><![CDATA[<p>Он начинает работу сразу после загрузки. Вы его запускали?<br /><a href="https://www.autohotkey.com/docs/commands/Hotkey.htm">Hotkey</a></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 01 Apr 2020 14:51:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138763#p138763</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138762#p138762</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Я бы на вашем месте рискнул рассмотреть код из этого поста.</p></blockquote></div><p>Я его давно рассматриваю <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> пока ничего не понятно. По какому событию он начинает работать и что такое hotkey (в инструкциях очень скудно описано)... <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Wed, 01 Apr 2020 14:48:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138762#p138762</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138761#p138761</link>
			<description><![CDATA[<div class="quotebox"><cite>lukyan пишет:</cite><blockquote><p>как сделать более правильнее, а именно блокировать я пока не знаю.</p></blockquote></div><p>Я бы на вашем месте рискнул рассмотреть код из <a href="http://forum.script-coding.com/viewtopic.php?pid=138752#p138752">этого</a> поста.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 01 Apr 2020 14:41:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138761#p138761</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138759#p138759</link>
			<description><![CDATA[<p><strong>stealzy</strong> Спасибо, ваш вариант заработал.</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Wed, 01 Apr 2020 14:16:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138759#p138759</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138758#p138758</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Сам подход не очень логичный. Зачем посылать ту же самую клавишу, которую нажимаем? Проще блокировать её, когда таймаут не прошёл.</p></blockquote></div><p>Да вы правы. Именно это я и хочу сделать.<br />Подход выбран методом тыка, как сделать более правильнее, а именно блокировать я пока не знаю.</p>]]></description>
			<author><![CDATA[null@example.com (lukyan)]]></author>
			<pubDate>Wed, 01 Apr 2020 14:15:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138758#p138758</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=138757#p138757</link>
			<description><![CDATA[<p>Сам подход не очень логичный. Зачем посылать ту же самую клавишу, которую нажимаем? Проще блокировать её, когда таймаут не прошёл.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 01 Apr 2020 12:22:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=138757#p138757</guid>
		</item>
	</channel>
</rss>
