<?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=15272&amp;type=atom" />
	<updated>2020-04-03T17:58:38Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15272</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138829#p138829" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>lukyan, вот так будет с сохранением вашей логики:</p></blockquote></div><p>Круто, спасибо, скрипт работает.</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-03T17:58:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138829#p138829</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138816#p138816" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2020-04-02T16:34:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138816#p138816</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138814#p138814" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> Супер! Спасибо!</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-02T14:55:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138814#p138814</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138811#p138811" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-04-02T10:48:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138811#p138811</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138808#p138808" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Что такое виртуальный код клавиши знаете? Если нет, почитайте об этом, иначе трудно будет пояснить.</p></blockquote></div><p>Примерно понимаю.<br />Мне не понятно по какому события запускается скрипт. Или он выполняется постоянно? Основное тело программы - это цикл?<br />Не понятно что делают команды HotKey. Хоть описание вы и скинули (и я его и раньше видел), но не очень доходит как она отрабатывают.</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-02T07:16:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138808#p138808</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138802#p138802" />
			<content type="html"><![CDATA[<p>Что такое виртуальный код клавиши знаете? Если нет, почитайте об этом, иначе трудно будет пояснить.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-04-01T23:07:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138802#p138802</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138801#p138801" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Так а зачем сомневаться или не сомневаться, можно же просто протестировать.</p></blockquote></div><p>Если вам не сильно сложно, расскажите логику работы скрипта - это будет гораздо полезнее чем просто рабочая и не понятная программа.</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-01T22:59:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138801#p138801</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138778#p138778" />
			<content type="html"><![CDATA[<p>Так а зачем сомневаться или не сомневаться, можно же просто протестировать.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-04-01T16:30:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138778#p138778</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138774#p138774" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Он начинает работу сразу после загрузки. Вы его запускали?</p></blockquote></div><p>Я не сомневаюсь что он работает. Но важно еще и понимать как он работает.<br />Он будет работать в бесконечном цикле?</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-01T16:23:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138774#p138774</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138763#p138763" />
			<content type="html"><![CDATA[<p>Он начинает работу сразу после загрузки. Вы его запускали?<br /><a href="https://www.autohotkey.com/docs/commands/Hotkey.htm">Hotkey</a></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-04-01T14:51:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138763#p138763</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138762#p138762" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-01T14:48:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138762#p138762</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138761#p138761" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-04-01T14:41:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138761#p138761</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138759#p138759" />
			<content type="html"><![CDATA[<p><strong>stealzy</strong> Спасибо, ваш вариант заработал.</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-01T14:16:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138759#p138759</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138758#p138758" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Сам подход не очень логичный. Зачем посылать ту же самую клавишу, которую нажимаем? Проще блокировать её, когда таймаут не прошёл.</p></blockquote></div><p>Да вы правы. Именно это я и хочу сделать.<br />Подход выбран методом тыка, как сделать более правильнее, а именно блокировать я пока не знаю.</p>]]></content>
			<author>
				<name><![CDATA[lukyan]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40714</uri>
			</author>
			<updated>2020-04-01T14:15:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138758#p138758</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт от ложных нажатий клавиатуры]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138757#p138757" />
			<content type="html"><![CDATA[<p>Сам подход не очень логичный. Зачем посылать ту же самую клавишу, которую нажимаем? Проще блокировать её, когда таймаут не прошёл.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-04-01T12:22:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138757#p138757</id>
		</entry>
</feed>
