<?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=16004</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16004&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Действия по многократному нажатию или удержанию одной клавиши».]]></description>
		<lastBuildDate>Thu, 21 Jan 2021 17:33:18 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145168#p145168</link>
			<description><![CDATA[<div class="quotebox"><cite>BlackCat пишет:</cite><blockquote><p>Мне просто хотелось бы разобраться и понять</p></blockquote></div><p>Но вы же не хотите делать, что вам советуют.<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Пока оставьте в покое WinMove, добейтесь нормальной работы примера, который я привел.</p></blockquote></div><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Таймер с самого начала можно запускать только на один раз, почитайте справку.</p></blockquote></div><p>Зачем тогда спрашиваете?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 21 Jan 2021 17:33:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145168#p145168</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145165#p145165</link>
			<description><![CDATA[<p><strong>BlackCat</strong></p><p>Я бы так сделал. Правда с клавишей Альт.</p><div class="codebox"><pre><code>WinGetPos,,,, TaskBarHeight, ahk_class Shell_TrayWnd
ScreenHeight := A_ScreenHeight-TaskBarHeight+7
ScreenWidth := A_ScreenWidth


; Многократное нажатие:
#If (Win = 1)
~Alt &amp; NumpadAdd Up:: Counter++
#If

!NumpadAdd::
Counter := 0, Win := 1
KeyWait, Alt, U
Win =

Action:
If (Counter = 1)
 WinMove A,,,, ScreenWidth/1.1, ScreenHeight/1.1

Else If (Counter = 2)
 WinMove A,,,, ScreenWidth/1.2, ScreenHeight/1.2

Else If (Counter = 3)
 WinMove A,,,, ScreenWidth/1.4, ScreenHeight/1.4
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Thu, 21 Jan 2021 17:22:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145165#p145165</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145152#p145152</link>
			<description><![CDATA[<p><strong>ypppu</strong><br />Мне просто хотелось бы разобраться и понять, почему в моем варианте после выполнения этой части<br /></p><div class="codebox"><pre><code>#NumpadAdd::
	; Удержание клавиши
	Keywait NumpadAdd, T0.5
	If (ErrorLevel) {
		WinMove A,,,, ScreenWidth/1.8, ScreenHeight/1.08
		Return
		}</code></pre></div><p>происходит выполнение части кода многократного нажатия, хотя здесь стоит Return<br />Т.е., эта часть кода срабатывает, но после отпускания удерживаемой клавиши, выполняется часть кода<br /></p><div class="codebox"><pre><code>	If (Counter = 1) {
		WinMove A,,,, ScreenWidth/1.1, ScreenHeight/1.1
		}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (BlackCat)]]></author>
			<pubDate>Thu, 21 Jan 2021 14:13:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145152#p145152</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145151#p145151</link>
			<description><![CDATA[<p>Похожая тема <a href="http://forum.script-coding.com/viewtopic.php?id=1205">AHK: Многодельность клавиши</a>.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Thu, 21 Jan 2021 13:32:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145151#p145151</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145138#p145138</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Сделал теперь так:<br /></p><div class="codebox"><pre><code>#NumpadAdd::
	; Многократное нажатие
	Counter++
	SetTimer Action, 777
	Return
	
Action:
	If (Counter = 1) {
		WinMove A,,,, ScreenWidth/1.1, ScreenHeight/1.1
		}
	Else If (Counter = 2) {
		WinMove A,,,, ScreenWidth/1.2, ScreenHeight/1.2
		}
	Else If (Counter = 3) {
		WinMove A,,,, ScreenWidth/1.4, ScreenHeight/1.4
		}
	SetTimer Action, Off
	Counter := 0
Return</code></pre></div><p>В этом куске больше ничего не могу найти, вроде работает нормально.<br />Подскажите, плз, куда копать теперь, чтобы после отпускания клавиши на удержание не выполнялся код многократного нажатия?</p>]]></description>
			<author><![CDATA[null@example.com (BlackCat)]]></author>
			<pubDate>Thu, 21 Jan 2021 08:38:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145138#p145138</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145137#p145137</link>
			<description><![CDATA[<p>Уже лучше. Таймер с самого начала можно запускать только на один раз, почитайте справку.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 21 Jan 2021 07:33:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145137#p145137</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145136#p145136</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Ага, одну ошибку нашел.<br />Теперь сделал так (самый конец скрипта):<br /></p><div class="codebox"><pre><code>	Else If (Counter = 3) {
		WinMove A,,,, ScreenWidth/1.4, ScreenHeight/1.4
		}
	SetTimer Action, Off
	Counter := 0
Return</code></pre></div><p>Все верно?</p>]]></description>
			<author><![CDATA[null@example.com (BlackCat)]]></author>
			<pubDate>Thu, 21 Jan 2021 07:30:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145136#p145136</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145135#p145135</link>
			<description><![CDATA[<p>Можно, только немного посоображать нужно. Пока оставьте в покое WinMove, добейтесь нормальной работы примера, который я привел.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 21 Jan 2021 07:08:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145135#p145135</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145134#p145134</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Что-то я не совсем понял.<br />Точнее - понял, что ничего не понял.<br />Счетчик работает в части многократного нажатия.<br />Сбой происходит в части удерживания кнопки - несмотря на Return иногда происходит выполнение части кода<br /></p><div class="codebox"><pre><code>	If (Counter = 1) {
		WinMove A,,,, ScreenWidth/1.1, ScreenHeight/1.1
		}</code></pre></div><p>Т.е., функция удерживания работает нормально, но иногда после отпускания клавиши выполняется этот кусок кода, который относится к многократному нажатию.</p><p>Можно по-подробнее, пожалуйста.<br />Может вообще невозможно посадить на одну кнопку функции многократного нажатия и удерживания?</p>]]></description>
			<author><![CDATA[null@example.com (BlackCat)]]></author>
			<pubDate>Thu, 21 Jan 2021 06:39:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145134#p145134</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145129#p145129</link>
			<description><![CDATA[<p>Прошу прощения. Не заметил &quot;Return&quot; в первом условии.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Thu, 21 Jan 2021 04:26:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145129#p145129</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145112#p145112</link>
			<description><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>происходит безусловное увеличение &quot;Counter&quot; на единицу, независимо от того, удерживается клавиша &quot;NumpadAdd&quot;, или нажимается многократно</p></blockquote></div><p>Вообще-то нет, там Return в случае, когда выполняется действие по удержанию.<br /></p><div class="quotebox"><cite>BlackCat пишет:</cite><blockquote><p>Что я делаю не так?</p></blockquote></div><p>Во-первых, таймер запускаете, только если Counter = 1, во-вторых, у вас таймер после запуска метки продолжает выполняться, то-есть метка будет выполняться бесконечно. Проверить можно так:<br /></p><div class="codebox"><pre><code>#NumpadAdd::
   ; Действие по удержанию клавиши
   Keywait NumpadAdd, T0.2
   If (ErrorLevel) {
      SoundBeep 900
      Return
      }
      
   ; Многократное нажатие
   Counter++
   If (Counter = 1) {
      SetTimer Action, 777
      }
Return

Action:
   If (Counter = 1) {
      SoundBeep 400
      }
   Else If (Counter = 2) {
      SoundBeep 600
      }
   Else If (Counter = 3) {
      SoundBeep 800
      }
   Counter := 0
   SoundBeep 400
Return </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 20 Jan 2021 20:41:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145112#p145112</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145111#p145111</link>
			<description><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>происходит безусловное увеличение &quot;Counter&quot; на единицу</p></blockquote></div><p>Возможно именно это.<br />Как Вы поняли, данный скрипт изменяет размеры активного окна и после удержания клавиши иногда происходит незапланированное выполнение блока<br /></p><div class="codebox"><pre><code>If (Counter = 1)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (BlackCat)]]></author>
			<pubDate>Wed, 20 Jan 2021 20:25:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145111#p145111</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145110#p145110</link>
			<description><![CDATA[<div class="quotebox"><cite>BlackCat пишет:</cite><blockquote><p>... второй иногда работает не так, как должно</p></blockquote></div><p>А как должно?</p><p>Как минимум, происходит безусловное увеличение &quot;Counter&quot; на единицу, независимо от того, удерживается клавиша &quot;NumpadAdd&quot;, или нажимается многократно, что заставляет выполниться первый &quot;If&quot; в &quot;Action&quot;, а за тем, так же, безусловно происходит обнуление &quot;Counter&quot;, в следствии чего, ей никогда не стать больше единицы.</p><p>Последняя фигурная скобка должна закрываться на том же уровне индентации, где начинается объявление инструкций, тело которых она содержит. У Вас она на один таб дальше, что сбивает с толку, так как она кажется вложенной из-за этого.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 20 Jan 2021 20:15:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145110#p145110</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Действия по многократному нажатию или удержанию одной клавиши]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=145108#p145108</link>
			<description><![CDATA[<p>Всем доброго времени!<br />Хотелось бы повесить выполнение различных команд на одной клавише, которые будут выполняются по многократному нажатию клавиши или ее удержанию.<br />По-отдельности куски кода работают нормально:<br /></p><div class="codebox"><pre><code>#NumpadAdd::
	; Действие по удержанию клавиши
	Keywait NumpadAdd, T0.2
	If (ErrorLevel) {
		WinMove A,,,, ScreenWidth/1.6, ScreenHeight/1.05
		Return
		}</code></pre></div><p>Но при совмещении двух кусков кода второй иногда работает не так, как должно:<br /></p><div class="codebox"><pre><code>WinGetPos,,,, TaskBarHeight, ahk_class Shell_TrayWnd
ScreenHeight := A_ScreenHeight-TaskBarHeight+7
ScreenWidth := A_ScreenWidth

#NumpadAdd::
	; Действие по удержанию клавиши
	Keywait NumpadAdd, T0.2
	If (ErrorLevel) {
		WinMove A,,,, ScreenWidth/1.6, ScreenHeight/1.05
		Return
		}
		
	; Многократное нажатие
	Counter++
	If (Counter = 1) {
		SetTimer Action, 777
		}
Return

Action:
	If (Counter = 1) {
		WinMove A,,,, ScreenWidth/1.1, ScreenHeight/1.1
		}
	Else If (Counter = 2) {
		WinMove A,,,, ScreenWidth/1.2, ScreenHeight/1.2
		}
	Else If (Counter = 3) {
		WinMove A,,,, ScreenWidth/1.4, ScreenHeight/1.4
		}
	Counter := 0
Return</code></pre></div><p>Что я делаю не так?</p>]]></description>
			<author><![CDATA[null@example.com (BlackCat)]]></author>
			<pubDate>Wed, 20 Jan 2021 19:33:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=145108#p145108</guid>
		</item>
	</channel>
</rss>
