<?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=5975&amp;type=atom" />
	<updated>2011-07-04T14:04:59Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5975</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49644#p49644" />
			<content type="html"><![CDATA[<p>Проблему решил отдельным запуском Х&#039;ов с выключенным авто повтором клавиш (да, у меня linux). Также запускаю по отдельному скрипту для каждого окна игры. Визуально задержек между нажатиями во всех окнах не заметно.</p>]]></content>
			<author>
				<name><![CDATA[kflirik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27065</uri>
			</author>
			<updated>2011-07-04T14:04:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49644#p49644</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49640#p49640" />
			<content type="html"><![CDATA[<p>Отдельные скрипты для каждого окна&nbsp; работают быстрее, но все равно после отпускания клавиши в неактивных окнах она еще нажимается.</p><p>Собственно ориентируюсь я на KeyClone, в нем при нажатие и отпускание клавиши работает синхронно для всех окон. С AHK такого вообще возможно добиться? KeyClone мне не подходит т.к. есть проблема с кликами мыши, ну и он платный</p>]]></content>
			<author>
				<name><![CDATA[kflirik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27065</uri>
			</author>
			<updated>2011-07-04T09:16:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49640#p49640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49637#p49637" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kflirik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27065</uri>
			</author>
			<updated>2011-07-03T21:36:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49637#p49637</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49636#p49636" />
			<content type="html"><![CDATA[<p>Псевдопараллельно. С использованием прерываний. Все как в цитате. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Как вариант еще использовать несколько скриптов ahk, запуская их из одного главного.</p>]]></content>
			<author>
				<name><![CDATA[InFlames]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24849</uri>
			</author>
			<updated>2011-07-03T14:04:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49636#p49636</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49635#p49635" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kflirik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27065</uri>
			</author>
			<updated>2011-07-03T12:45:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49635#p49635</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49634#p49634" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2011-07-03T12:18:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49634#p49634</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49633#p49633" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Settimer, Label, -1
return

msgbox Этот таймер запустится один раз</code></pre></div>]]></content>
			<author>
				<name><![CDATA[InFlames]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24849</uri>
			</author>
			<updated>2011-07-03T12:11:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49633#p49633</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49632#p49632" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kflirik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27065</uri>
			</author>
			<updated>2011-07-03T11:50:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49632#p49632</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49631#p49631" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[InFlames]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24849</uri>
			</author>
			<updated>2011-07-03T11:30:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49631#p49631</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Параллельное выполнение команд]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49629#p49629" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kflirik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27065</uri>
			</author>
			<updated>2011-07-03T10:25:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49629#p49629</id>
		</entry>
</feed>
