<?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=6704</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6704&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Конвеер для горячих клавиш».]]></description>
		<lastBuildDate>Sun, 18 Mar 2012 17:45:51 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58026#p58026</link>
			<description><![CDATA[<p>Последний скрипт «лучше» первого.<br /></p><div class="quotebox"><blockquote><p>можно эту строку переместить в начало скрипта?</p></blockquote></div><p><strong>global pipe, pipeMaxLength </strong> — объявление глобальных переменных, перемещать вне функции можно, но не нужно.<br /></p><div class="quotebox"><blockquote><p>pipe.MaxIndex() откуда берется значение индекса?</p></blockquote></div><p><strong>MaxIndex()</strong> — встроенный метод возвращающий наибольшее значение индекса обрабатываемого массива.<br /></p><div class="quotebox"><blockquote><p>добавление &quot;нажатия&quot; в конвеер?</p></blockquote></div><div class="quotebox"><blockquote><p>pipe[1].() - не представляю что это,&nbsp; pipe.Remove(1) - уменьшение индекса конвейера на 1 ?</p></blockquote></div><p>Добавление.&nbsp; <strong>pipe[1].()</strong> — запуск функции имя которой сохранено в «ячейке» с индексом 1 массива <strong>pipe</strong>. <br /><strong>pipe.Remove(1)</strong> — удаление значения с индексом 1 (это как выдернуть из стопки тарелок нижнюю)</p><div class="quotebox"><blockquote><p>Но надеюсь <strong>когда-нибудь</strong> напишу это сам, честно, не хочу Вас напрягать</p></blockquote></div><p>Примеров достаточно для написания «прямо сейчас»<br /></p><div class="quotebox"><blockquote><p>я искренне благодарен за потраченное на меня время.</p></blockquote></div><p>Время потрачено на скрипт <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Sun, 18 Mar 2012 17:45:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58026#p58026</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58025#p58025</link>
			<description><![CDATA[<p><strong>creature.ws</strong><br />я искренне благодарен за потраченное на меня время. <br />Пока пробую Ваш первый предложенный скрипт - вроде бы работает хорошо. Теперь вот собираюсь в нем полностью разобраться, не люблю когда не до конца понимаю как оно работает. Думаю еще понадобится добавить горячую клавишу на обнуление конвейера, а так же при if pipe.MaxIndex() &gt; pipeMaxLength заменять последнее в конвейере нажатие на следующее нажатие. Но надеюсь когда-нибудь напишу это сам, честно, не хочу Вас напрягать <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="codebox"><pre><code>
ShakePipe(FuncName)
{
    global pipe, pipeMaxLength     ; можно эту строку переместить в начало скрипта?
    if pipe.MaxIndex() &gt;= pipeMaxLength ; pipe.MaxIndex() откуда берется значение индекса?
        Return
    pipe.Insert(FuncName)  ; добавление &quot;нажатия&quot; в конвеер?
    If pipe.Maxindex() = 1
        While pipe.MaxIndex()
            pipe[1].(), pipe.Remove(1) ; pipe[1].() - не представляю что это,  pipe.Remove(1) - уменьшение индекса конвейера на 1 ?
}</code></pre></div><p>Просто с ahk знаком не так давно и даже синтаксис для меня &quot;диковат&quot; после паскале-подобного &quot;кликера&quot;, который я юзал раньше.</p>]]></description>
			<author><![CDATA[null@example.com (avgur)]]></author>
			<pubDate>Sun, 18 Mar 2012 17:26:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58025#p58025</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58006#p58006</link>
			<description><![CDATA[<p>-del</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Sun, 18 Mar 2012 00:58:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58006#p58006</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57988#p57988</link>
			<description><![CDATA[<div class="codebox"><pre><code>
; AHK-L
#MaxThreads 15
#MaxThreadsPerHotkey 15
pipeMaxLength := 15
pipe := []
Return

f1::ShakePipe(&quot;f1&quot;)
f2::ShakePipe(&quot;f2&quot;)
f3::ShakePipe(&quot;f3&quot;)

ShakePipe(FuncName)
{
    global pipe, pipeMaxLength
    if pipe.MaxIndex() &gt;= pipeMaxLength
        Return
    pipe.Insert(FuncName)
    If pipe.Maxindex() = 1
        While pipe.MaxIndex()
            pipe[1].(), pipe.Remove(1)
}
f1()
{
   msgbox f1
}
f2()
{
   msgbox f2
}
f3()
{
   msgbox f3
}</code></pre></div><p>А «несколько конвейеров различной вместительности в одном скрипте» можно, вероятно, использовать так:<br /></p><div class="codebox"><pre><code>Class CQueue
{
    __New(MaxLength) {
        this.MaxLength := MaxLength
    }

    Add(FuncName) {
        if this.MaxIndex() &gt;= this.MaxLength
            Return &quot;&quot;
        this.Insert(FuncName)
        If this.Maxindex() = 1
            While this.MaxIndex()
                this[1].(), this.Remove(1)
    }
}

f1() {
    MsgBox % A_ThisFunc
}
f2() {
    MsgBox % A_ThisFunc
}
f3() {
    MsgBox % A_ThisFunc
}
f4() {
    MsgBox % A_ThisFunc
}
f5() {
    MsgBox % A_ThisFunc
}
f6() {
    MsgBox % A_ThisFunc
}

#MaxThreads 40
#MaxThreadsPerHotkey 20
q1 := new CQueue(4)
q2 := new CQueue(2)

f1::q1.Add(&quot;f1&quot;)
f2::q1.Add(&quot;f2&quot;)
f3::q1.Add(&quot;f3&quot;)
f4::q2.Add(&quot;f4&quot;)
f5::q2.Add(&quot;f5&quot;)
f6::q2.Add(&quot;f6&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Sat, 17 Mar 2012 18:06:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57988#p57988</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57985#p57985</link>
			<description><![CDATA[<p>Для 2-х поточного конвейера скрипт работает отлично.<br />Я попытался переделать его для 3-х и более поточного конвейера клавиш:<br /></p><div class="codebox"><pre><code>
#MaxThreads 3
global i, Queue
i:=0
return
#MaxThreadsPerHotkey 3
f1::Add(&quot;f1&quot;)
f2::Add(&quot;f2&quot;)
f3::Add(&quot;f3&quot;)
#MaxThreadsPerHotkey 1
f1()
{
   msgbox f1
}
f2()
{
   msgbox f2
}
f3()
{
   msgbox f3
}


Add(FuncName)
{ 							
   if(i&gt;=3)
      return   							
	i:=i+1   							
   if(i=1)
   {
      while(i&gt;0)
      {
        %FuncName%()							
	FuncName := Queue 
	i:=i-1 							
      }
   }
   else	
        Queue := FuncName   
return
}</code></pre></div><p>Но тут получается Queue - это последнее нажатие. Т.е. нажимаю последовательно клавиши 1, 2 и 3, в конвейер идет клавиша 1, потом клавиша 3 и еще раз клавиша 3, вместо той последовательности 1, 2, 3 что нажималась.</p>]]></description>
			<author><![CDATA[null@example.com (avgur)]]></author>
			<pubDate>Sat, 17 Mar 2012 15:54:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57985#p57985</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55867#p55867</link>
			<description><![CDATA[<p>Нужно создать свою очередь, например так:<br /></p><div class="codebox"><pre><code>#MaxThreads 2
i:=0
return
#MaxThreadsPerHotkey 2
f1::Add(&quot;f1&quot;)
f2::Add(&quot;f2&quot;)
f3::Add(&quot;f3&quot;)
#MaxThreadsPerHotkey 1
f1()
{
   msgbox f1
}
f2()
{
   msgbox f2
}
f3()
{
   msgbox f3
}
Add(FuncName)
{
   global i, Queue
   if(i&gt;=2)
      return
   Critical On
   i++
   Critical Off
   if(i=1)
   {
	  while(i&gt;0)
	  {
		 %FuncName%()
	     Critical On
	     FuncName := Queue
	     i--
	     Critical Off
	  }
   }
   else
      Queue := FuncName
   return
}</code></pre></div><p>FuncName- первая в очереди функция, она либо уже выполняется, либо сейчас начнёт<br />Queue- это функция, которая ждёт своей очереди.<br />i- количество функций в очереди<br />Add()- добавляет функцию в очередь, если там есть свободные места.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Sat, 21 Jan 2012 22:01:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55867#p55867</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Конвеер для горячих клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55853#p55853</link>
			<description><![CDATA[<p>АНК только осваиваю, вот решил попытаться написать скрипт для любимой игры:</p><div class="codebox"><pre><code>Process, Priority, , High ;скрипт с высоким приоритетом
Critical

$1::
{
SendInput,{F6}
SendInput,{F2}
SendInput,{1}
Sleep, 45
SendInput,{F1}
Sleep, 855
Return
}

$2::
{
SendInput,{F6}
SendInput,{F2}
SendInput,{2}
Sleep, 45
SendInput,{F1}
Sleep, 855
Return
}

$3::
{
SendInput,{F6}
SendInput,{F2}
SendInput,{3}
Sleep, 45
SendInput,{F1}
Sleep, 855
Return
}

$4::
{
SendInput,{F6}
SendInput,{F2}
SendInput,{4}
Sleep, 45
SendInput,{F1}
Sleep, 855
Return
}

$5::
{
SendInput,{F6}
SendInput,{F2}
SendInput,{5}
Sleep, 45
SendInput,{F1}
Sleep, 855
Return
}</code></pre></div><p>Клавиши F1, F2, F6 - это просто тоглы в игре, придающие умениям различный эффект.<br />Клавиши 1,2,3. . . 10 - собственно умения (в скрипте я привел только 5 штук, чтобы не выкладывать простыню).</p><p>Сначала я не знал про Critical и испытывал неудобства при одновременно или быстром последовательном нажатии клавиш 1-5. Но с Critical получился очень приятный эффект &quot;конвеера&quot; или &quot;буфера&quot;, т.е. все нажатия клавиш 1-5 выполняются последовательно (в том порядке в каком я их нажимал).<br />Но мне очень хотелось бы изменить размер этого конвеера до значения 2. Т.е. при последовательном очень быстром нажатии клавиш 1,2,3,4,5 (ну или в любой другой последовательности) выполнялось только 2 потока (если конечно я правильно понимаю значение этого слова), а остальные нажатия просто игнорировались до тех пор пока не выполниться хотябы первое нажатие.<br />Я прочитал то что нашел про Crtical, #MaxThreads, #MaxThreadsPerHotkey, #MaxThreadsBuffer, Thread interrup, но для моего ума слишком мало простых примеров, чтобы понять куда это вписывать и как можно использовать. Посему прошу помощи более опытных пользователей.</p>]]></description>
			<author><![CDATA[null@example.com (avgur)]]></author>
			<pubDate>Sat, 21 Jan 2012 17:18:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55853#p55853</guid>
		</item>
	</channel>
</rss>
