<?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=5975</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5975&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Параллельное выполнение команд».]]></description>
		<lastBuildDate>Mon, 04 Jul 2011 14:04:59 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49644#p49644</link>
			<description><![CDATA[<p>Проблему решил отдельным запуском Х&#039;ов с выключенным авто повтором клавиш (да, у меня linux). Также запускаю по отдельному скрипту для каждого окна игры. Визуально задержек между нажатиями во всех окнах не заметно.</p>]]></description>
			<author><![CDATA[null@example.com (kflirik)]]></author>
			<pubDate>Mon, 04 Jul 2011 14:04:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49644#p49644</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49640#p49640</link>
			<description><![CDATA[<p>Отдельные скрипты для каждого окна&nbsp; работают быстрее, но все равно после отпускания клавиши в неактивных окнах она еще нажимается.</p><p>Собственно ориентируюсь я на KeyClone, в нем при нажатие и отпускание клавиши работает синхронно для всех окон. С AHK такого вообще возможно добиться? KeyClone мне не подходит т.к. есть проблема с кликами мыши, ну и он платный</p>]]></description>
			<author><![CDATA[null@example.com (kflirik)]]></author>
			<pubDate>Mon, 04 Jul 2011 09:16:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49640#p49640</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49637#p49637</link>
			<description><![CDATA[<p>А это идея. Запустить 5 скриптов, в каждом сделать одинаковые горячие клавиши, но отправлять из каждого скрипта команды разным окнам.<br />А как переменные отдать другим скриптам?<br />Например у меня сейчас в массив вносятся идентификаторы окон </p><div class="codebox"><pre><code>WinGet, wowid, List, WOW</code></pre></div><p>как мне каждому из 5 скриптов передать свой wowidX, например для </p><div class="codebox"><pre><code>ClonesPush(strKeys) {
        global wowid1

        IfWinNotActive, ahk_id %wowid1%
        ControlSend, , %strKeys%, ahk_id %wowid1%
}
~Left::ClonesPush(&quot;{Left down}&quot;)
~Left up::ClonesPush(&quot;{Left up}&quot;)
~Right::ClonesPush(&quot;{Right down}&quot;)
~Right up::ClonesPush(&quot;{Right up}&quot;)</code></pre></div><p>? global ведь действителен только для 1 скрипта, Ctrl+V в окне AHK во всяком случае не показывает переменные в другом скрипте.</p><p>UPD<br />Появилась еще 1 проблема - при дублирования нажатия кнопок в неактивные окна, если долго держать кнопку нажатой то в неактивных после отпускание кнопки продолжаются действия. Я думаю это происходит, из-за этого:<br />- при удержании кнопки начинается повтор нажатий (получается - каждый повтор - самостоятельное нажатие)<br />- кнопка нажимается в каждое окно по очереди<br />- между нажатиями в окна проходит какое-то время, хотя SetKeyDelay, -1, -1<br />- кнопка записывается в буфер и отправляется окнам позже<br />Это как-то можно решить в 1 скрипте, или все-же делать для каждого окна свой?</p>]]></description>
			<author><![CDATA[null@example.com (kflirik)]]></author>
			<pubDate>Sun, 03 Jul 2011 21:36:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49637#p49637</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49636#p49636</link>
			<description><![CDATA[<p>Псевдопараллельно. С использованием прерываний. Все как в цитате. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Как вариант еще использовать несколько скриптов ahk, запуская их из одного главного.</p>]]></description>
			<author><![CDATA[null@example.com (InFlames)]]></author>
			<pubDate>Sun, 03 Jul 2011 14:04:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49636#p49636</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49635#p49635</link>
			<description><![CDATA[<p>InFlames, согласен. Сделал запуски через SetTimer в итоге времени вышло практически одинаково (чуть быстрее).<br />Оставлю последовательный запуск.<br />SetTimer пожалуй мне все-же пригодится для одновременного ввода логинов/паролей в запущенные клиенты ))</p><p>UPD С логинами тоже не вышло </p><div class="codebox"><pre><code>
Login1 := &quot;multilogin1&quot;
Login2 := &quot;multilogin2&quot;
Login3 := &quot;multilogin3&quot;
Login4 := &quot;multilogin4&quot;
Login5 := &quot;multilogin5&quot;
Passw := &quot;multipass&quot;

^!l::LoginFunc()
LoginFunc() {
        ;функция входа в игру
        global wowid1, wowid2, wowid3, wowid4, wowid5
        global Login1,Login2,Login3,Login4,Login5,Passw

        ;SetKeyDelay устанавливает задержку между нажатиями клавишь 100 мсек

        Settimer, LoginWoW1, -1
        Settimer, LoginWoW2, -1
        Settimer, LoginWoW3, -1
        Settimer, LoginWoW4, -1
        Settimer, LoginWoW5, -1
        return

        LoginWoW1:
        SetKeyDelay, 100
        Sleep 50
        ControlSend, , {end}, ahk_id %wowid1%
        Sleep 500
        ControlSend, , {Shift down}{Home}, ahk_id %wowid1%
        Sleep 10
        ControlSend, , {Shift up}, ahk_id %wowid1%
        Sleep 50
        ControlSend, , {Delete}, ahk_id %wowid1%
        Sleep 50
        ControlSend, , %Login1%, ahk_id %wowid1%
        Sleep 500
        ControlSend, , {Tab}, ahk_id %wowid1%
        Sleep 50
        ControlSend, , %Passw%, ahk_id %wowid1%
        Sleep 50
        ControlSend, , {Tab}, ahk_id %wowid1%
        Sleep 50
        ControlSend, , {end}, ahk_id %wowid1%
        SetKeyDelay, 0
        return

        LoginWoW2:
        SetKeyDelay, 100
        Sleep 100
        ControlSend, , {end}, ahk_id %wowid2%
        Sleep 50
        ControlSend, , {Shift down}{Home}, ahk_id %wowid2%
        Sleep 10
        ControlSend, , {Shift up}, ahk_id %wowid2%
        Sleep 10
        ControlSend, , {Delete}, ahk_id %wowid2%
        Sleep 50
        ControlSend, , %Login1%, ahk_id %wowid1%
        Sleep 500
        ControlSend, , {Tab}, ahk_id %wowid1%
        Sleep 50
        ControlSend, , %Passw%, ahk_id %wowid1%
        Sleep 50
        ControlSend, , {Tab}, ahk_id %wowid1%
        Sleep 50
        ControlSend, , {end}, ahk_id %wowid1%
        SetKeyDelay, 0
        return
....
}</code></pre></div><p>Вбивает логины поочередно в каждое окно</p>]]></description>
			<author><![CDATA[null@example.com (kflirik)]]></author>
			<pubDate>Sun, 03 Jul 2011 12:45:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49635#p49635</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49634#p49634</link>
			<description><![CDATA[<p><strong>InFlames</strong>, мне тоже интересно узнать, как <em>SetTimer</em> позволяет запускать команды параллельно.<br /></p><div class="quotebox"><cite>Autohotkey help (RUS) пишет:</cite><blockquote><p>Хотя таймеры могут создать впечатление того, что скрипт выполняет несколько задач одновременно, это не так. Напротив, спланированная по времени подпрограмма ведет себя точно так же, как и любой другой поток: она может прервать какой-либо поток или быть прерванной другим потоком, например таким, как подпрограмма горячей клавиши.</p></blockquote></div><p><strong>kflirik</strong>, я думаю, Вам проще будет сначала выполнить 5 раз <em>Run, %Game%, %PATH%, , instanceID</em>. Затем подождать, пока все экземпляры приложения загрузятся, а потом уже всё остальное. Ведь Autohotkey не исполняет приложения, а только даёт короткую команду ОС на их запуск.<br />P. S. Если запускать несколько объёмных программ с одного жёсткого диска параллельно, времени уйдёт больше, нежели заупскать последовательно.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sun, 03 Jul 2011 12:18:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49634#p49634</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49633#p49633</link>
			<description><![CDATA[<div class="codebox"><pre><code>Settimer, Label, -1
return

msgbox Этот таймер запустится один раз</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (InFlames)]]></author>
			<pubDate>Sun, 03 Jul 2011 12:11:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49633#p49633</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49632#p49632</link>
			<description><![CDATA[<p>Насчет </p><div class="codebox"><pre><code>settimer</code></pre></div><p>уже смотрел, не совсем понял. Я так понимаю мне надо создать 5 таймеров чтоб 5 задач запустились параллельно? И тогда насчет синтаксиса </p><div class="codebox"><pre><code>SetTimer, Label [, Period|On|Off, Priority]</code></pre></div><p>как сделать чтоб таймер сработал только 1 раз?</p><p>UPD: Если сделать запуск процессов по таймеру </p><div class="codebox"><pre><code>SetTimer, RunWoW, 250
return

RunWoW:
Run, %Game%, %PATH%, ,
sleep 1500
WinSetTitle, World of Wаrсrаft, ,WOW5
return</code></pre></div><p>то получается тоже самое как и по очереди, т.к. SetTimer ждет окончания работы после предыдущего запуска и невозможно присвоить окнам новые имена (везде одно).</p>]]></description>
			<author><![CDATA[null@example.com (kflirik)]]></author>
			<pubDate>Sun, 03 Jul 2011 11:50:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49632#p49632</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49631#p49631</link>
			<description><![CDATA[<p>Используйте </p><div class="codebox"><pre><code>settimer</code></pre></div><p>На счет ядер <a href="http://www.autohotkey.com/forum/topic8728-90.html">http://www.autohotkey.com/forum/topic8728-90.html</a>, функция Affinity_Set()</p>]]></description>
			<author><![CDATA[null@example.com (InFlames)]]></author>
			<pubDate>Sun, 03 Jul 2011 11:30:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49631#p49631</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Параллельное выполнение команд]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=49629#p49629</link>
			<description><![CDATA[<p>Здравствуйте, существует ли возможно выполнять команды AHK параллельно? Например я запускаю 5 программ по очереди:<br /></p><div class="codebox"><pre><code>Game:= &quot;Z:\mnt\misc\Games\WoW_3.3.5a\wow.exe -opengl&quot;
PATH:= &quot;Z:\mnt\misc\Games\WoW_3.3.5a\&quot;

Run, %Game%, %PATH%, , instanceID1
sleep 2000
WinSetTitle, World of Wаrсrаft, ,WOW1
WinMove, ahk_pid %instanceID1%, , -0, -0, 1280, 1024
WinActivate, ahk_pid %instanceID1%
WinMaximize, ahk_pid %instanceID1%

Run, %Game%, %PATH%, , instanceID2
sleep 2000
WinSetTitle, World of Wаrсrаft, ,WOW2
WinMove, ahk_pid %instanceID2%, , 0, A_ScreenHeight-240, 320, 240

Run, %Game%, %PATH%, , instanceID3
sleep 2000
WinSetTitle, World of Wаrсrаft, ,WOW3
WinMove, ahk_pid %instanceID3%, , 320, A_ScreenHeight-240, 320, 240

Run, %Game%, %PATH%, , instanceID4
sleep 2000
WinSetTitle, World of Wаrсrаft, ,WOW4
WinMove, ahk_pid %instanceID4%, , 640, A_ScreenHeight-240, 320, 240

Run, %Game%, %PATH%, , instanceID5
sleep 2000
WinSetTitle, World of Wаrсrаft, ,WOW5
WinMove, ahk_pid %instanceID5%, , 960, A_ScreenHeight-240, 320, 240</code></pre></div><p>Можно ли все блоки<br /></p><div class="codebox"><pre><code>Run, %Game%, %PATH%, ,
Sleep 2000
...</code></pre></div><p>запустить параллельно? Если запускать без sleep, то WinSetTitle не срабатывает.<br />И еще вопрос, как указать программе выполняться на одном из ядер процессора? Это можно задать через параметры Run&nbsp; или надо в строку запуска параметры какие то добавлять чтоб windows назначила ядра?</p>]]></description>
			<author><![CDATA[null@example.com (kflirik)]]></author>
			<pubDate>Sun, 03 Jul 2011 10:25:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=49629#p49629</guid>
		</item>
	</channel>
</rss>
