<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10439&amp;type=atom" />
	<updated>2015-02-23T09:37:55Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=10439</id>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91816#p91816" />
			<content type="html"><![CDATA[<p>Большое спасибо <strong>ypppu</strong> и <strong>YMP</strong> за советы, помощь и объяснения.</p>]]></content>
			<author>
				<name><![CDATA[elektrovenik]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29521</uri>
			</author>
			<updated>2015-02-23T09:37:55Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91816#p91816</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91812#p91812" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>elektrovenik пишет:</cite><blockquote><p>% &quot;ahk_id&quot; win%A_Index% - эта часть кода относится к параметру поиска WinTitle, но что в ней что я не понимаю(</p></blockquote></div><p>Здесь строка &quot;ahk_id&quot; соединяется с содержимым переменной по имени &quot;win&quot; + индекс цикла, чтобы сформировать параметр команды. Процент с пробелом говорит АНК о том, что дальнейший код нужно интерпретировать как выражение, а не как обычный параметр. Можно было и проще:<br /></p><div class="codebox"><pre><code>
Space::
WinGet, win, List, ahk_exe calc.exe
Loop, %win%
{
    win_id := win%A_Index%
    ControlSend,, 1, ahk_id %win_id%
}
return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2015-02-23T08:54:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91812#p91812</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91809#p91809" />
			<content type="html"><![CDATA[<p>Да, ahk_exe нужно смотреть в англоязычной справке.<br />Если читали внимательно, количество окон - не такое уж неизвестное.<br />В каких случаях обрамляется знаком %, а в каких знак % ставится впереди и с пробелом - читайте на русском языке <strong>Переменные и выражения</strong> (оригинал статьи в AutoHotkey.chm: &quot;Variables and Expressions&quot;).</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2015-02-23T08:23:32Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91809#p91809</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91806#p91806" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>&nbsp; &nbsp; ControlSend,, 1, % &quot;ahk_id&quot; win%A_Index%</p></blockquote></div><p>Пожалуйста <strong>YMP</strong>, объясните образование этой строки. Я, к сожалению, настолько тугой, что не могу этого понять.<br />% &quot;ahk_id&quot; win%A_Index% - эта часть кода относится к параметру поиска WinTitle, но что в ней что я не понимаю(</p>]]></content>
			<author>
				<name><![CDATA[elektrovenik]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29521</uri>
			</author>
			<updated>2015-02-23T07:47:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91806#p91806</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91803#p91803" />
			<content type="html"><![CDATA[<p>ahk_exe был введён уже после того, как был сделан русский перевод этой страницы справки, поэтому он есть только в английской.</p><p>Количество найденных окон будет у вас в переменной win.<br /></p><div class="codebox"><pre><code>
Space::
WinGet, win, List, ahk_exe calc.exe
Loop, %win%
{
    ControlSend,, 1, % &quot;ahk_id&quot; win%A_Index%
}
return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2015-02-23T03:33:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91803#p91803</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91800#p91800" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><div class="codebox"><pre><code>WinGet, OutputVar, List, ahk_exe calc.exe</code></pre></div><p>В справке всё расписано.</p></blockquote></div><p>Огромнейшее спасибо! С Вашей подсказкой получилось реализовать в таком виде:<br /></p><div class="codebox"><pre><code>
Space::
WinGet, win, List, ahk_exe calc.exe
ControlSend,, 1, ahk_id%win1%
ControlSend,, 1, ahk_id%win2%
ControlSend,, 1, ahk_id%win3%
return
</code></pre></div><p>Но сразу же возникли вопросы:<br />Поиск через WinGet. Вы в нем очень здорово применили WinTitle ahk_exe calc.exe, но в справке этого нет.<br /></p><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"><p>Заголовок или часть заголовка окна (метод поиска можно задавать командой SetTitleMatchMode). Если этот и следующие 3 параметра опущены, будет использовано последнее найденное окно. Чтобы задать окно через его класс, используйте конструкцию ahk_class ТочноеИмяКласса (можно посмотреть программой Window Spy). Чтобы использовать идентификатор процесса (PID), задайте параметр как ahk_pid %ПеременнаяСодержащаяPID%. Чтобы использовать идентификатор окна, задайте параметр как ahk_id %ПеременнаяСодержащаяID%.</p></div></div><p>Из справки видны варианты определения ahk_class и ahk_pid. Откуда вы узнали, про возможность прописывать ahk_exe ?</p><p>Второй вопрос: мой вариант кода годится если только мне известно конечное количество окон. А как реализовать скрипт, для неизвестного мне количества окон?</p>]]></content>
			<author>
				<name><![CDATA[elektrovenik]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29521</uri>
			</author>
			<updated>2015-02-23T01:21:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91800#p91800</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91797#p91797" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>WinGet, OutputVar, List, ahk_exe calc.exe</code></pre></div><p>В справке всё расписано.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2015-02-22T21:04:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91797#p91797</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91796#p91796" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Подскажите пожалуйста реализацию задумки.</p></blockquote></div><p>А что-такое в #3 <img src="//forum.script-coding.com/img/smilies/mad.png" width="15" height="15" />? Замени MsgBox на ControlSend...</p>]]></content>
			<author>
				<name><![CDATA[shiz]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26249</uri>
			</author>
			<updated>2015-02-22T20:54:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91796#p91796</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91794#p91794" />
			<content type="html"><![CDATA[<p>Спасибо <strong>YMP</strong> за здравую критику и замечания. Теперь я почувствовал уровень своей технической безграмотности.<br />Задумка описана в первом посте:</p><p>Как пример отлично подходит ситуация, если запустить несколько приложений &quot;Калькулятор&quot;<br />Я хочу реализовать скрипт, который будет по нажатию клавиши находить все окна, созданные процессом Сalc.exe, а затем отправлять в каждое найденное окно нажатие клавиши.<br />В скрипте не нужно реализовывать постоянный циклический поиск окон (предполагается, что скрипт будет запущен уже после открытия всех окон, т.е. их потребуется найти один раз). Так же могу сказать, что окна не будут скрытыми.</p><p>Подскажите пожалуйста реализацию задумки.</p><p>P.S. Немного подумав, я понял, что условие поиска окон по PID родительского процесса не обязательно, просто мне оно казалось наиболее правильным. Можно предложить иную реализацию (WinWait / IfWinExist или как-то еще).</p>]]></content>
			<author>
				<name><![CDATA[elektrovenik]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29521</uri>
			</author>
			<updated>2015-02-22T18:47:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91794#p91794</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91787#p91787" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>WinGet MyPseudoArray, List, ahk_exe Calc.exe
while ID := MyPseudoArray%A_Index%
    MsgBox %ID%
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[shiz]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26249</uri>
			</author>
			<updated>2015-02-22T13:08:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91787#p91787</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91785#p91785" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Process, Exist, Calc.exe ; нашли процесс<br />PID := %name+1% ; - начинается первая запарка. Тут бы надо прописать математическую функцию сложения A+n= An. То есть цикл поиска пидов данного процесса, при нахождении каждого нового пида, должно присваивать ему имя переменной N+1. Для первого найденного окна это будет N, для второго N1, для третьего N2 и т.д</p></blockquote></div><p>Что за пиды данного процесса? У процесса только один пид. Если запущены два Калькулятора, то это два процесса, а не один. Присвоение имени переменной пиду — это вообще непонятно. Это просто технически неосуществимо. Пид назначается операционной системой и ничего вы ему не присвоите.</p><div class="quotebox"><blockquote><p>Я конечно понимаю, что можно пойти простым путем и сделать так:</p></blockquote></div><p>А какой смысл так делать? Почему вы думаете, что повторный вызов Process, Exist не вернёт вам тот же самый пид, что и предыдущий вызов? Команда ведь не в курсе, что вы её уже вызывали, стало быть просто найдёт тот же самый процесс Calc.exe и вернёт вам тот же самый его пид.</p><div class="quotebox"><blockquote><p>если я знаю, сколько будет запущенно процессов и соответственно окон</p></blockquote></div><p>У процесса может быть и несколько окон, в том числе скрытые.</p><p>Так что вам требуется? Все окна одного процесса? Все окна всех процессов с данным именем? В том числе скрытые окна?</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2015-02-22T13:03:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91785#p91785</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Поиск множества окон одного процесса и отправка в них нажатий клавиш]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91780#p91780" />
			<content type="html"><![CDATA[<p>Всем привет. Вот привела в замешательство реализация такой задачи:<br />Хочу сделать скрипт, который будет по имени процесса находить все созданные им окна и отправлять в них нажатие клавиши. Для простоты рассмотрим на примере блокнота<br /></p><div class="codebox"><pre><code>
Search:
Loop {
Process, Exist, Calc.exe ; нашли процесс
PID := %name+1% ; - начинается первая запарка. Тут бы надо прописать математическую функцию сложения A+n= An. То есть цикл поиска пидов данного процесса, при нахождении каждого нового пида, должно присваивать ему имя переменной N+1. Для первого найденного окна это будет N, для второго N1, для третьего N2 и т.д
Gosub, SendKey
}

SendKey:
СontrolSend,, клавиша,  ahk_id %name+1%; Вот тут вторая заковырка. Нужна функция, которая будет подставлять в переменную %name+1% все найденные при поиске переменные с PID&#039;ами процессов
</code></pre></div><p>Я конечно понимаю, что можно пойти простым путем и сделать так:<br /></p><div class="codebox"><pre><code>
key x::
gosub, Search
return

Search:
Process, Exist, Calc.exe
PID := %name%
Process, Exist, Calc.exe
PID := %name1%
Process, Exist, Calc.exe
PID := %name2%
Process, Exist, Calc.exe
PID := %name3%
Process, Exist, Calc.exe
PID := %name4%
Gosub, SendKey
return

SendKey:
СontrolSend,, клавиша,  ahk_id %name%
СontrolSend,, клавиша,  ahk_id %name1%
СontrolSend,, клавиша,  ahk_id %name2%
СontrolSend,, клавиша,  ahk_id %name3%
СontrolSend,, клавиша,  ahk_id %name4%
return
</code></pre></div><p>Но это сгодится только если я знаю, сколько будет запущенно процессов и соответственно окон, а хочется добиться универсальности.<br />Как я написал выше, примерное понимание как это должно быть у меня есть, но технической оснащенности и знаний синтаксиса языка мне не хватает. Помогите пожалуйста примером, как это должно быть грамотно реализовано.</p>]]></content>
			<author>
				<name><![CDATA[elektrovenik]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29521</uri>
			</author>
			<updated>2015-02-22T10:05:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91780#p91780</id>
		</entry>
</feed>
