<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Двойное нажатие клавиш F1-F12]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=9941&amp;type=atom" />
	<updated>2023-04-01T12:13:31Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=9941</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157422#p157422" />
			<content type="html"><![CDATA[<p><strong>dm.tr.y</strong>, если вопрос ко мне, то увы, в АНК 2 я ни уха, ни рыла. Никогда его не использовал.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2023-04-01T12:13:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157422#p157422</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157409#p157409" />
			<content type="html"><![CDATA[<p><strong>dm.tr.y</strong>, ознакомьтесь, пожалуйста, с <a href="https://forum.script-coding.com/misc.php?action=rules">Правилами</a>, отредактируйте свои посты. Обратите внимание на правила <a href="https://forum.script-coding.com/misc.php?action=rules#quotation">цитирования</a>.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2023-03-31T13:41:15Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157409#p157409</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157408#p157408" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p><strong>serzh82saratov</strong> уже постил код для тройного нажатия. Проще всего его и использовать.<br />Только поставьте где-нибудь в начале скрипта директиву #UseHook On, т.к. клавиша посылает сама себя при одиночном нажатии и нужно избежать зацикливания.<br /></p><div class="codebox"><pre><code>
#UseHook On

F11::
    KeyWait, %A_ThisHotkey%
    KeyWait, %A_ThisHotkey%, D T0.3
    If ErrorLevel
        Send, {F11}
    Else
    {
        KeyWait, %A_ThisHotkey%
        KeyWait, %A_ThisHotkey%, D T0.3
        If ErrorLevel
            Send, xxx@mail.ru
        Else
            Send, yyy@mail.ru
        KeyWait, %A_ThisHotkey%
    }
    Return
</code></pre></div></blockquote></div><p>Посдкажите: как исправить этот скрипт чтобы работал на AutoHotkey 2?</p>]]></content>
			<author>
				<name><![CDATA[dm.tr.y]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34072</uri>
			</author>
			<updated>2023-03-31T11:13:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157408#p157408</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=106395#p106395" />
			<content type="html"><![CDATA[<p><strong>dm.tr.y</strong></p><p>Да, скрипт работает немного косо в области удержания&nbsp; - исправлю опубликую тут в теме.</p><p>Приношу свои извинения, за недочёт.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2016-07-27T07:52:06Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=106395#p106395</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=106389#p106389" />
			<content type="html"><![CDATA[<p><strong>dm.tr.y</strong><br />Вот посмотри этот код, тут были внесены изменения и коррекция.<br /></p><div class="codebox"><pre><code>Enter::
  сBaseKey              := &quot;Enter&quot;
  cAloneKey             := &quot;1&quot;  ;одиночное нежатие клавиши
  cDoubleKey            := &quot;2&quot;  ;двойное нажатие клавиши
  cHoldingKey           := &quot;3&quot;  ;удержание клавиши
 ;Активация констант для скорости реакции нажатий  для остального
  сPause_PressKey       := 400   
  cWaitHoldingBaseKey   := 1     
  cCountHoldingBaseKey  := 80   
  cWaitVirtualKey       := 5    
  cWaitBaselKey         := 10
  fAutoRepeat           := False       ; Автоповтор основной клавиши         = деактивирован
  fAloneHoldKey         := False       ; Модификатор для одиночного нажатия  = деактивирован
  fDoubleHoldKey        := False       ; Модификатор для двойного нажатия    = деактивирован
  fHoldingHoldKey       := False       ; Модификатор для удержания           = деактивирован
  gosub sbTrioProcessingKeys
Return</code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>Enter::
  сBaseKey              := &quot;Enter&quot;
  cAloneKey             := &quot;1&quot;  ;одиночное нежатие клавиши
  cDoubleKey            := &quot;2&quot;  ;двойное нажатие клавиши
  cHoldingKey           := &quot;3&quot;  ;удержание клавиши
 ;Активация констант для скорости реакции нажатий  для остального
  сPause_PressKey       := 400   
  cWaitHoldingBaseKey   := 1     
  cCountHoldingBaseKey  := 80   
  cWaitVirtualKey       := 5    
  cWaitBaselKey         := 10
  fAutoRepeat           := False       ; Автоповтор основной клавиши         = деактивирован
  fAloneHoldKey         := False       ; Модификатор для одиночного нажатия  = деактивирован
  fDoubleHoldKey        := False       ; Модификатор для двойного нажатия    = деактивирован
  fHoldingHoldKey       := False       ; Модификатор для удержания           = деактивирован
  gosub sbTrioProcessingKeys
Return

/*
==============Подпрограмма - Три действия/клавиши в одной======================
сBaseKey          :=  Автозадание через &quot;A_ThisHotkey&quot;, возможно переназначение, но не рекомендуются, возможны коллизии
cAloneKey         :=  ;1-я Виртуальная клавиша, по умолчанию задаётся переменной &quot;сBaseKey&quot;
cAloneHoldKey     :=  ;Клавиша-модификатор для одиночного нажатия, основная и клавиша-модификатор
cDoubleKey        :=  ;2-я Виртуальная клавиша, по умолчанию задаётся переменной &quot;сBaseKey&quot;
cDoubleHoldKey    :=  ;Клавиша-модификатор для двойного нажатия, основная и клавиша-модификатор
cHoldingKey       :=  ;3-я Виртуальная клавиша, по умолчанию задаётся переменной &quot;сBaseKey&quot;. Клавишиа удерживается(автоповтор)
cHoldingHoldKey   :=  ;Модификатор удержания, основная и клавиша-модификатор
Gosub sbIniTrioParams - вызов подпрограммы для задания констант для скорости реакции по обработке нажатий

ВАЖНО!!! - Задание клавиш-модификаторов не обязательно, при условии, если их флаги в состоянии FALSE

--------------------------------------------------------------
Описание констант для скорости реакции по обработке нажатий
-------------------------------------------------------------
сPause_PressKey  
          Если пауза меньше этого количества миллисекунд, то нажатие двойное. Если больше, то оно расценивается как 2 одиночных
cWaitHoldingBaseKey    
          Время ожидания в цикле определения удержания за каждый шаг, при больших значениях блокирует одиночное/двойное нажатие.
cCountHoldingBaseKey  
          Число шагов цикла для определения удержание клавиши/кнопки, при больших значениях блокирует одиночное/двойное нажатие.
cWaitVirtualKey
          Время задержки между эмуляцией нажатия на клавиши/кнопки подмены реально нажатой клавишей/кнопкой.
cWaitBaselKey 
          Время для Без/С автоповтором основной клавиши/кнопки
fAutoRepeat
          Автоповтор реально нажатой клавиши/кнопки - включён/выключен True/False
fAloneHoldKey
          Флаг(On/Off) для работы модификатора одиночного нажатия
fDoubleHoldKey
          Флаг(On/Off) для работы модификатора двойного нажатия
fHoldingHoldKey
          Флаг(On/Off) для работы модификатора удержания 
          
;-------Оптимальное значение, рекомендуемые, на основе игр - &quot;The Witcher 2: Assassins of Kings&quot; и &quot;The Witcher 3: Wild Hunt&quot;
Значения 
  сPause_PressKey       := 325  
  cWaitHoldingBaseKey   := 1     
  cCountHoldingBaseKey  := 40   
  cWaitVirtualKey       := 5    
  cWaitBaselKey         := 10
  fAutoRepeat           := False   Автоповтор основной клавиши         = деактивирован (при активации требуется описать, см выше)
  fAloneHoldKey         := False   Модификатор для одиночного нажатия  = деактивирован (при активации требуется описать, см выше)
  fDoubleHoldKey        := False   Модификатор для двойного нажатия    = деактивирован (при активации требуется описать, см выше)  
  fHoldingHoldKey       := False   Модификатор для удержания           = деактивирован (при активации требуется описать, см выше)  
*/

;------------Начало работы      
#UseHook, On
sbTrioProcessingKeys:
  vCountHoldingBaseKey:=cCountHoldingBaseKey
  ;Проверка на удержание нажатия/клика клавиши/кнопки
  while ((GetKeyState(сBaseKey, &quot;P&quot;)) &amp;&amp; vCountHoldingBaseKey &amp;&amp; (!сSecond_PressKey)) 
      {
        Sleep  %cWaitHoldingBaseKey%   
        vCountHoldingBaseKey--
      }
  if (!vCountHoldingBaseKey)
      { 
       If (fHoldingHoldKey)
           Send, {%cHoldingHoldKey% Down}
       Send, {%cHoldingKey% Down}  ;Удержание нажатия/клика клавиши/кнопки
        while (GetKeyState(сBaseKey, &quot;P&quot;))
                 {
                   Sleep %cWaitVirtualKey%    
                 }
         Send, {%cHoldingKey% Up}
       If (fHoldingHoldKey)
           Send, {%cHoldingHoldKey% Up}         
        Gosub sbAutoRepeat
        return
      } 
     else 
        Gosub, sbPressCountKeys
return            ; Конец обработки подпрограммы sbStartProcessingKeys


;Одиночное нажатие/клик клавиши/кнопки
sbAloneKey:
  If (fAloneHoldKey)
        {
            Send, {%cAloneKey% Down}
            Send, {%cAloneHoldKey% Down}
            Sleep %cWaitVirtualKey%
            Send, {%cAloneHoldKey% Up}
            Send, {%cAloneKey% Up}  
        }
      Else 
      {
            Send, {%cAloneKey% Down}
            Sleep %cWaitVirtualKey%    
            Send, {%cAloneKey% Up}      
      }
  Gosub sbAutoRepeat
Return

;Двойное нажатие/клик клавиши/кнопки
sbDoubleKey:
  If (fDoubleHoldKey)
        {
            Send, {%cDoubleKey% Down}
            Send, {%cDoubleHoldKey% Down}
            Sleep %cWaitVirtualKey%
            Send, {%cDoubleHoldKey% Up}
            Send, {%cDoubleKey% Up}
        }
      Else  
      {
            Send, {%cDoubleKey% Down}
            Sleep %cWaitVirtualKey%    
            Send, {%cDoubleKey% Up}        
      }
  Gosub sbAutoRepeat
Return

;Без/С автоповтором основной клавиши/кнопки
sbAutoRepeat:
  if (fAutoRepeat) ; Автоповтор основной клавиши
      {
        Send, {%сBaseKey% Down}
        Sleep %cWaitVirtualKey%
        Send, {%сBaseKey% Up}      
      }
Return

sbPressCountKeys:
  If not сSecond_PressKey
      {
        сSecond_PressKey := 1
        SetTimer, sbDoublePressKey, -%сPause_PressKey%
      }
    Else
      {
        сSecond_PressKey := 0
        SetTimer, sbDoubleKey, -1
      }
Return

sbDoublePressKey:
  If not сSecond_PressKey
        Return
  сSecond_PressKey := 0
  SetTimer, sbAloneKey, -1
Return
;-----------------------------------------------------------------
#UseHook, Off</code></pre></div></div></div><p>Или ты хочешь реализацию зажатия условно-бесконечную, т.е. до отжатия основной клавиши - <strong>сBaseKey</strong>?</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2016-07-27T04:48:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=106389#p106389</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=106388#p106388" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dm.tr.y пишет:</cite><blockquote><p>Подскажите: как этот скрипт подправить чтобы 3-им пунктом при зажатии клавиши зажималась другая клавиша, не могу разобраться в скрипте.</p></blockquote></div><p> Не понял, так при зажатии <strong>Enter</strong> происходит зажатие <strong>LButton</strong>.<br /></p><div class="codebox"><pre><code>Enter::    
  сBaseKey              := &quot;Enter&quot;
  cAloneKey             := &quot;Enter&quot;   ; Одиночное нажатие
  cDoubleKey            := &quot;Space&quot;   ; Двойное нажатие
  cHoldingKey           := &quot;LButton&quot; ; Удержание/Зажатие
  сPause_PressKey       := 300   
  cWaitHoldingBaseKey   := 1     
  cCountHoldingBaseKey  := 40   
  cWaitVirtualKey       := 5    
  cWaitBaselKey         := 10
  fAutoRepeat           := false
  gosub sbTrioProcessingKeys
return</code></pre></div><p>Ясно?</p><p>P.S. Я перепроверю код, я внёс проварки - не публиковал их, т.к. им ни кто не интересовался.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2016-07-27T04:08:27Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=106388#p106388</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=106281#p106281" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><p><strong>Maxim</strong> Может будет проще так...</p><p>1. Одиночное нажатие клавиши<br />2. Двойное нажатие клавиши<br />3. Удержание клавиши клавиши</p><p>Подпрограмма унифицирована, так что её достаточно описать и вызвать и число таких описаний/блоков не ограничено </p><div class="codebox"><pre><code>Enter::    
  сBaseKey              := &quot;Enter&quot;
  cAloneKey             := &quot;Enter&quot;   ; Действия по Enter
  cDoubleKey            := &quot;Space&quot;   ; Взять всё
  cHoldingKey           := &quot;LButton&quot;
  сPause_PressKey       := 300   
  cWaitHoldingBaseKey   := 1     
  cCountHoldingBaseKey  := 40   
  cWaitVirtualKey       := 5    
  cWaitBaselKey         := 10
  fAutoRepeat           := false
  gosub sbTrioProcessingKeys
return</code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Подпрограммы(набор) - Три действия/клавиши в одной</div><div class="fancy_spoiler"><div class="codebox"><pre><code>;==============Подпрограмма - Три действия/клавиши в одной======================
;  сBaseKey              :=         ; Нажимаемая клавиша
;  cAloneKey             :=         ; 1-я Виртуальная клавиша
;  cDoubleKey            :=         ; 2-я Виртуальная клавиша
;  cHoldingKey           :=         ; 3-я Виртуальная клавиша
;--------------Оптимальное значение для игр и мышки на опыте игры &quot;The Witcher 2 - Assassins of Kings&quot;
;  сPause_PressKey       := 350    ; Если пауза меньше этого количества миллисекунд, то нажатие двойное. Если больше, то оно расценивается как 2 одиночных
;  cWaitHoldingBaseKey   := 2      ; Время ожидания в цикле определения удержания за каждый шаг, при больших значениях блокирует одиночное/двойное нажатие.
;  cCountHoldingBaseKey  := 25     ; Число шагов цикла для определения удержание клавиши/кнопки, при больших значениях блокирует одиночное/двойное нажатие.
;  cWaitVirtualKey       := 10     ; Время задержки между эмуляцией нажатия на клавиши/кнопки подмены реально нажатой клавишей/кнопкой.
;  fAutoRepeat           := false  ; Автоповтор реально нажатой клавиши/кнопки - включён/выключен True/False

;------------Начало работы      
#UseHook, On
sbTrioProcessingKeys:
; Требуется реализация блокировки от входа с разных клавиш, т.е. защита от множественного входа на време отработки этой подпрограммы.
  vCountHoldingBaseKey:=cCountHoldingBaseKey
  ;Проверка на удержание нажатия/клика клавиши/кнопки
  while ((GetKeyState(сBaseKey, &quot;P&quot;)) &amp;&amp; vCountHoldingBaseKey &amp;&amp; (!сSecond_PressKey)) 
      {
        sleep %cWaitHoldingBaseKey%   
        vCountHoldingBaseKey--
      }
  if (!vCountHoldingBaseKey)
      { 
  ; Нормальное удержание не работает, нужно не посылать код отжатия, пока нажата реальная клавиша - в подпрограмме sbAutoRepeat треуется корректировка.
  ; Надо сделать режим удерживать или нет клавишу, а это ввод второго флага, может быть для всех трёх клавиш.        
        Send, {%cHoldingKey% Down}  ;Удержание нажатия/клика клавиши/кнопки
        Sleep %cWaitVirtualKey%    
        Send, {%cHoldingKey% Up}
        Gosub sbAutoRepeat
        return
      } 
     else 
        Gosub, sbPressCountKeys
return            ; Конец обработки подпрограммы sbStartProcessingKeys


;Одиночное нажатие/клик клавиши/кнопки
sbAloneKey:
  Send, {%cAloneKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cAloneKey% Up}
  Gosub sbAutoRepeat
Return

;Двойное нажатие/клик клавиши/кнопки
sbDoubleKey:
  Send, {%cDoubleKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cDoubleKey% Up}  
  Gosub sbAutoRepeat
Return

;Без/С автоповтором основной клавиши/кнопки
sbAutoRepeat:
  if (!fAutoRepeat)
      {
        Send, {%сBaseKey% Down}   ; Без автоповтора
        ;while (GetKeyState(сBaseKey, &quot;P&quot;))
        KeyWait, %сBaseKey%  ;Sleep %cWaitBaselKey% 
        Send, {%сBaseKey% Up}      
      }
Return                            ; C автоповтором

#UseHook, Off

sbPressCountKeys:
  If not сSecond_PressKey
      {
        сSecond_PressKey := 1
        SetTimer, sbDoublePressKey, -%сPause_PressKey%
      }
    Else
      {
        сSecond_PressKey := 0
        SetTimer, sbDoubleKey, -1
      }
Return

sbDoublePressKey:
  If not сSecond_PressKey
        Return
  сSecond_PressKey := 0
  SetTimer, sbAloneKey, -1
Return
;-----------------------------------------------------------------</code></pre></div></div></div><p> P.S.&nbsp; Более двух нажатий это перебор IMHO - хотя и это можно реализовать.</p></blockquote></div><p>Подскажите: как этот скрипт подправить чтобы 3-им пунктом при зажатии клавиши зажималась другая клавиша<br />не могу разобраться в скрипте</p>]]></content>
			<author>
				<name><![CDATA[dm.tr.y]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34072</uri>
			</author>
			<updated>2016-07-22T18:14:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=106281#p106281</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86227#p86227" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>serzh82saratov уже постил код для тройного нажатия. Проще всего его и использовать.<br />Только поставьте где-нибудь в начале скрипта директиву #UseHook On, т.к. клавиша посылает сама себя при одиночном нажатии и нужно избежать зацикливания.</p></blockquote></div><p>В тестовом скрипте #UseHook по дефолту, всё время забываю. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2014-09-01T18:43:35Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86227#p86227</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86226#p86226" />
			<content type="html"><![CDATA[<p>А какое это имеет значение?</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-09-01T16:26:37Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86226#p86226</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86224#p86224" />
			<content type="html"><![CDATA[<p>Мне кажется это перебор, с учётом того что сейчас множество клавиатур программируемые. Обычно/Как правило это язык LUA.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2014-09-01T16:22:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86224#p86224</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86221#p86221" />
			<content type="html"><![CDATA[<p>Отличная идея. Получается бесконечное количество возможных действий на функциональные клавиши. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-09-01T14:53:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86221#p86221</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86219#p86219" />
			<content type="html"><![CDATA[<p>Для N-кратного нажатия (согласен, что на практике неудобно, но кому уж как) каскад из условных операторов можно записать в более простом виде. И не нужно будет его дублировать для каждого хоткея, достаточно добавить хоткей перед циклом и оформить действие в виде отдельной процедуры:<br /></p><div class="codebox"><pre><code>#UseHook On

F10::
F11::
F12::
N:=0
Loop {
   N++
   KeyWait, %A_ThisHotkey%
   KeyWait, %A_ThisHotkey%, D T0.3
} Until ErrorLevel
If N=1
   Send, {%A_ThisHotkey%}
Else
   Gosub % IsLabel(L := A_ThisHotkey . &quot;_&quot; . N) ? L : &quot;NotCombo&quot;
Return

NotCombo:
   MsgBox % &quot;Количество нажатий &quot; . A_ThisHotkey . &quot; : &quot; . N
Return

F11_2:
   SendInput, xxx@mail.ru
Return

F11_3:
   SendInput, yyy@mail.ru
Return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-09-01T13:24:42Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86219#p86219</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86215#p86215" />
			<content type="html"><![CDATA[<p>Спасибо, YMP!</p><p>Спасибо, Indomito, что подбросили идею о возможности использования удержания клавиши.</p>]]></content>
			<author>
				<name><![CDATA[Maxim]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32458</uri>
			</author>
			<updated>2014-09-01T09:10:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86215#p86215</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86211#p86211" />
			<content type="html"><![CDATA[<p>Вот вариант для 4 нажатий.<br /></p><div class="codebox"><pre><code>
#UseHook On

F11::
    KeyWait, %A_ThisHotkey%
    KeyWait, %A_ThisHotkey%, D T0.3
    If ErrorLevel
        Send, {%A_ThisHotkey%}      ; 1 нажатие, сама клавиша.
    Else
    {
        KeyWait, %A_ThisHotkey%
        KeyWait, %A_ThisHotkey%, D T0.3
        If ErrorLevel
            Send, xxx@mail.ru       ; 2 нажатия.
        Else
        {
            KeyWait, %A_ThisHotkey%
            KeyWait, %A_ThisHotkey%, D T0.3
            If ErrorLevel
                Send, yyy@mail.ru   ; 3 нажатия.
            Else
                Send, zzz@mail.ru   ; 4 нажатия.
        }
    }
    Return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-09-01T08:26:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86211#p86211</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Двойное нажатие клавиш F1-F12]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86210#p86210" />
			<content type="html"><![CDATA[<p><strong>Maxim</strong> Может будет проще так...</p><p>1. Одиночное нажатие клавиши<br />2. Двойное нажатие клавиши<br />3. Удержание клавиши клавиши</p><p>Подпрограмма унифицирована, так что её достаточно описать и вызвать и число таких описаний/блоков не ограничено </p><div class="codebox"><pre><code>Enter::    
  сBaseKey              := &quot;Enter&quot;
  cAloneKey             := &quot;Enter&quot;   ; Действия по Enter
  cDoubleKey            := &quot;Space&quot;   ; Взять всё
  cHoldingKey           := &quot;LButton&quot;
  сPause_PressKey       := 300   
  cWaitHoldingBaseKey   := 1     
  cCountHoldingBaseKey  := 40   
  cWaitVirtualKey       := 5    
  cWaitBaselKey         := 10
  fAutoRepeat           := false
  gosub sbTrioProcessingKeys
return</code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Подпрограммы(набор) - Три действия/клавиши в одной</div><div class="fancy_spoiler"><div class="codebox"><pre><code>;==============Подпрограмма - Три действия/клавиши в одной======================
;  сBaseKey              :=         ; Нажимаемая клавиша
;  cAloneKey             :=         ; 1-я Виртуальная клавиша
;  cDoubleKey            :=         ; 2-я Виртуальная клавиша
;  cHoldingKey           :=         ; 3-я Виртуальная клавиша
;--------------Оптимальное значение для игр и мышки на опыте игры &quot;The Witcher 2 - Assassins of Kings&quot;
;  сPause_PressKey       := 350    ; Если пауза меньше этого количества миллисекунд, то нажатие двойное. Если больше, то оно расценивается как 2 одиночных
;  cWaitHoldingBaseKey   := 2      ; Время ожидания в цикле определения удержания за каждый шаг, при больших значениях блокирует одиночное/двойное нажатие.
;  cCountHoldingBaseKey  := 25     ; Число шагов цикла для определения удержание клавиши/кнопки, при больших значениях блокирует одиночное/двойное нажатие.
;  cWaitVirtualKey       := 10     ; Время задержки между эмуляцией нажатия на клавиши/кнопки подмены реально нажатой клавишей/кнопкой.
;  fAutoRepeat           := false  ; Автоповтор реально нажатой клавиши/кнопки - включён/выключен True/False

;------------Начало работы      
#UseHook, On
sbTrioProcessingKeys:
; Требуется реализация блокировки от входа с разных клавиш, т.е. защита от множественного входа на време отработки этой подпрограммы.
  vCountHoldingBaseKey:=cCountHoldingBaseKey
  ;Проверка на удержание нажатия/клика клавиши/кнопки
  while ((GetKeyState(сBaseKey, &quot;P&quot;)) &amp;&amp; vCountHoldingBaseKey &amp;&amp; (!сSecond_PressKey)) 
      {
        sleep %cWaitHoldingBaseKey%   
        vCountHoldingBaseKey--
      }
  if (!vCountHoldingBaseKey)
      { 
  ; Нормальное удержание не работает, нужно не посылать код отжатия, пока нажата реальная клавиша - в подпрограмме sbAutoRepeat треуется корректировка.
  ; Надо сделать режим удерживать или нет клавишу, а это ввод второго флага, может быть для всех трёх клавиш.        
        Send, {%cHoldingKey% Down}  ;Удержание нажатия/клика клавиши/кнопки
        Sleep %cWaitVirtualKey%    
        Send, {%cHoldingKey% Up}
        Gosub sbAutoRepeat
        return
      } 
     else 
        Gosub, sbPressCountKeys
return            ; Конец обработки подпрограммы sbStartProcessingKeys


;Одиночное нажатие/клик клавиши/кнопки
sbAloneKey:
  Send, {%cAloneKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cAloneKey% Up}
  Gosub sbAutoRepeat
Return

;Двойное нажатие/клик клавиши/кнопки
sbDoubleKey:
  Send, {%cDoubleKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cDoubleKey% Up}  
  Gosub sbAutoRepeat
Return

;Без/С автоповтором основной клавиши/кнопки
sbAutoRepeat:
  if (!fAutoRepeat)
      {
        Send, {%сBaseKey% Down}   ; Без автоповтора
        ;while (GetKeyState(сBaseKey, &quot;P&quot;))
        KeyWait, %сBaseKey%  ;Sleep %cWaitBaselKey% 
        Send, {%сBaseKey% Up}      
      }
Return                            ; C автоповтором

#UseHook, Off

sbPressCountKeys:
  If not сSecond_PressKey
      {
        сSecond_PressKey := 1
        SetTimer, sbDoublePressKey, -%сPause_PressKey%
      }
    Else
      {
        сSecond_PressKey := 0
        SetTimer, sbDoubleKey, -1
      }
Return

sbDoublePressKey:
  If not сSecond_PressKey
        Return
  сSecond_PressKey := 0
  SetTimer, sbAloneKey, -1
Return
;-----------------------------------------------------------------</code></pre></div></div></div><p> P.S.&nbsp; Более двух нажатий это перебор IMHO - хотя и это можно реализовать.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2014-09-01T08:01:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86210#p86210</id>
		</entry>
</feed>
