<?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=6868&amp;type=atom" />
	<updated>2012-02-29T21:33:44Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6868</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57375#p57375" />
			<content type="html"><![CDATA[<p>я не дописал тогда, а когда дописал, то получилась ерунда <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T21:33:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57375#p57375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57374#p57374" />
			<content type="html"><![CDATA[<p>Непонятно, к чему <strong>Hotkey, LShift &amp; ESC, The_Sims</strong> три раза подряд? Чтоб скрипт совсем-совсем понял?<br />И если есть метка <strong>The_Sims:</strong>, то LShift &amp; ESC:: перед Send {F5} писать уже не нужно</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T21:31:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57374#p57374</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57373#p57373" />
			<content type="html"><![CDATA[<p>---удалил, т.к.&nbsp; все конструкции сводятся к моему первому посту... <br />Упростить код, т.е. исходник не удаётся. Да, жаль конечно, но отслеживать дубль-клавиши не хочется, хотя можно их вынести в include, но это я сам себя ещё больше запутаю <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T21:20:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57373#p57373</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57372#p57372" />
			<content type="html"><![CDATA[<p>По поводу<br /></p><div class="codebox"><pre><code>Hotkey, IfWinActive , %tracked_app%</code></pre></div><p>Вы задаете условие, но не сам хоткей, тогда уж надо так:</p><div class="codebox"><pre><code>; начало скрипта
Hotkey, IfWinActive , %tracked_app%
Hotkey, LShift &amp; ESC, The_Sims

...
...

; конец скрипта, после ExitApp

The_Sims:
   Send {F5} 
return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T21:06:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57372#p57372</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57371#p57371" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><p><strong>Irbis</strong> и в дополнение про ahk-файла в виде подпрограммы/функции<br />Что надо поправить в коде, что бы было различие между выходом из приложения и его минимизацией/потерей фокуса.<br />Т.е. что бы оно оставалось в трее, но не работало или это немного наворочено будет, т.к. его повторная активация часть кода ahk-менеджера?</p></blockquote></div><div class="codebox"><pre><code>#SingleInstance ignore
tracked_app = %1%

; код, запускаемый однократно при активации приложения

loop
{
   ; код, выполняемый в цикле при активном приложении

   sleep 10 ; &lt;-- задержка повтора кода в цикле
   if !WinExist(tracked_app)
      break
   if !Winactive(tracked_app)
   {
        ; код, выполняемый при потере фокуса
   }
   WinWaitActive, %tracked_app%
}
; код, выполняемый однократно при закрытии

ExitApp
ESC::
LShift &amp; ESC::
Send {F5}
return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T20:55:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57371#p57371</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57370#p57370" />
			<content type="html"><![CDATA[<p><strong>Indomito</strong>, </p><div class="quotebox"><blockquote><p>компиляция либо отказ от нее никак никак не влияет на простоту кода и прочие параметры.<br />Если&nbsp; есть возможность, лучше использовать один файл, при необходимости подключая большие&nbsp; части директивой <strong>#Include &lt;Filename&gt;</strong>,<br />либо использовать библиотеки.</p></blockquote></div><p>согласен, но выноска дублирующих клавиш вносит путаницу или же я не очень понял то что было написано вами выше.</p><p><span class="bbu">add</span></p><p>А если написать вначале каждой функции<br /><strong>Hotkey, IfWinActive ,The Sims™ 3</strong><br />Разве это не верно?</p><p>Я про такую запись<br /></p><div class="codebox"><pre><code>;1ый скрипт -------------------------- 
func1(tracked_app)
{
Hotkey, IfWinActive , %tracked_app%
ESC::                   
LShift &amp; ESC::       
Send {F5}            
loop
{
   ; Do something
   sleep 1000
   if !WinActive(tracked_app)
      break
}
MsgBox, %tracked_app% is not active.
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T20:32:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57370#p57370</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57369#p57369" />
			<content type="html"><![CDATA[<p><strong>Irbis</strong> и в дополнение про ahk-файла в виде подпрограммы/функции<br />Что надо поправить в коде, что бы было различие между выходом из приложения и его минимизацией/потерей фокуса.<br />Т.е. что бы оно оставалось в трее, но не работало или это немного наворочено будет, т.к. его повторная активация часть кода ahk-менеджера? <br /></p><div class="codebox"><pre><code>tracked_app = %1%

ESC::
LShift &amp; ESC::
Send {F5}

loop
{
   ; Do something
   sleep 1000
   if !WinActive(tracked_app)
      break
}
 
MsgBox, %tracked_app% is not active.
ExitApp</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T20:27:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57369#p57369</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57368#p57368" />
			<content type="html"><![CDATA[<p><strong>creature.ws</strong>, видимо. </p><p><strong>Indomito</strong>, компиляция либо отказ от нее никак никак не влияет на простоту кода и прочие параметры.<br />Если&nbsp; есть возможность, лучше использовать один файл, при необходимости подключая большие&nbsp; части директивой <strong>#Include &lt;Filename&gt;</strong>,<br />либо использовать библиотеки.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T20:26:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57368#p57368</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57367#p57367" />
			<content type="html"><![CDATA[<p>OFF: <strong>Irbis</strong>, вы либо меня не поняли, либо отклоняетесь от темы.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-02-29T20:10:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57367#p57367</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57366#p57366" />
			<content type="html"><![CDATA[<p>И так видимо для простоты + унификации + понижения путаницы и коллизий надо:<br />- отказаться от компиляции;<br />- использовать для каждой программы свой ahk-файл.</p><p>Верно? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T20:04:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57366#p57366</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57365#p57365" />
			<content type="html"><![CDATA[<p>Поздно. Я уже прочитал <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /><br />Метка не локальная переменная, верно, но использование меток для переходов (читай - Goto) очень дурной стиль, растущий корнями из далекого-далекого бейсика,<br />и без <strong>очень</strong> уважительной причины должен караться битием по рукам. Имхо. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T19:59:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57365#p57365</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57363#p57363" />
			<content type="html"><![CDATA[<p>По <strong>1ому вопросу:</strong><br />В моем примере <strong>sleep 1000</strong> просто задает паузу, чтоб скрипт меньше загружал процессор, так как там крутится практически пустой цикл.<br />Так, как в вашем примере, вставлять нельзя - при нажатии на хоткей произойдет безусловный переход, причем сразу в середину цикла.</p><p>И собственно, по <strong>2 вопросу</strong>, который связан с первым - чтобы на одну и ту же клавишу задать разные действия, надо или самому организовать переключение, или использовать <strong>IfWinActive</strong>.<br />А написать 2 подпрограммы с одинаковыми хоткеями не получится, получите ошибку <em>Duplicate hotkey</em>.<br />Смотрите описание <a href="http://www.autohotkey.com/docs/commands/Hotkey.htm"><span style="color: Purple"><span class="bbu">Hotkey</span></span></a>. Если использовать&nbsp; <strong>IfWinActive</strong> для создания одинаковых хоткеев,<br /> тогда опять придем практически к примеру из вашего первого поста, с которого все и началось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>Hotkey, IfWinActive ,The Sims™ 3
Hotkey, LShift &amp; ESC, The_Sims

Hotkey, IfWinActive ,Dragon Age : Начало
Hotkey, LShift &amp; ESC, Dragon_Age

The_Sims:
  Send {F5}
return

Dragon_Age:
  Send, {Up Down}{Enter Down}{RButton Down}
  KeyWait, % A_ThisHotkey
  Send, {Up Up}{Enter Up}{RButton Up}
return</code></pre></div><p>Вместо <span style="color: green">; Do something </span> в процедурах func1, func2 и т.д. пишется код, который должен атоматически выполняться при активации нужного приложения:</p><div class="codebox"><pre><code>func1(tracked_app)
{
   ;------------------------------------------------------------------
   ; здесь код, запускаемый однократно при активации приложения
   ;------------------------------------------------------------------
   loop
   {
      ;------------------------------------------------------------------
      ; здесь код, выполняемый в цикле при активном приложении
      ;------------------------------------------------------------------

      sleep 1000 ; &lt;-- задержка повтора кода в цикле
      if !WinActive(tracked_app)
      break
   }
   ;------------------------------------------------------------------
   ; здесь код, выполняемый однократно при потере фокуса/закрытии
   ;------------------------------------------------------------------
}</code></pre></div><p>Все хоткеи должны быть вне процедур, тем более циклов , если вы не практикуете какое-то особо <span style="color: white">извращенное</span> изощренное программированние,<br />например чтоб умышленно запутать код. А вот из тела хоткея вызов процедуры вполне возможен. Надеюсь, я всё понятно объяснил.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T19:45:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57363#p57363</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57359#p57359" />
			<content type="html"><![CDATA[<p>Прошу прощения за тормоза, но возник вопрос, т.е. сразу два.</p><p><span class="bbu"><strong>Вопрос №1</strong></span></p><p>Коммнентарий <strong>Do something</strong> (Сделать это/Сделайте что-то) подрузамевает:<br />На примере одной из функции.<br /></p><div class="codebox"><pre><code>;1ый скрипт -------------------------- 
func1(tracked_app)
{
loop
{
   ; Do something

ESC::                   ;&lt;------------------
LShift &amp; ESC::       ;&lt;------------------
Send {F5}            ; &lt;------------------

   sleep 1000
   if !WinActive(tracked_app)
      break
}
MsgBox, %tracked_app% is not active.
}</code></pre></div><p>верно вставил или нет?<br />Вопрос возник из за строчки <strong>sleep 1000</strong>, т.е. она должна идти первой или же последней или же вообще не нужна?</p><p><span class="bbu"><strong>Вопрос №2</strong></span> </p><p>Если в функциях будут описаны действия на одну и туже клавишу, то коллизий не возникнет? <br />Я понимаю что не должно, вроде бы, но я не уверен.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T14:36:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57359#p57359</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57355#p57355" />
			<content type="html"><![CDATA[<p>Да, в одном файле проще... думаю с видимостью переменных проблем не будет, но я сам разберусь - RTFM <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2012-02-29T14:09:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57355#p57355</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как правильно написать скрипт-менеджер других скриптов?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=57353#p57353" />
			<content type="html"><![CDATA[<p>Насколько мне известно, в компиляторе такой возможности не предусмотрено. Можно воспользоваться каким-либо инталлятором, который собирет файлы в один установочный,<br />но при установке они все равно распакуются. Такими же возможностями - созданием self-extraсting архивов - обладают и архиваторы, например winrar и winzip.<br />Если так необходимо, чтоб был именно <strong>один</strong> файл, почему бы вызываемые скрипты не оформить в виде процедур? У вас они работает по очереди, проблем возникнуть не должно.</p><p>Пример: (куда уж без него) <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>; AHK_L v. 1.1.5.6 x32 Unicode
#SingleInstance ignore
DetectHiddenWindows , On
SetTitleMatchMode , 2
 
array :={&quot;Total Commander&quot;: &quot;func1&quot;
       , &quot;ahk_class Notepad&quot;: &quot;func2&quot;
       , &quot;ahk_class OperaWindowClass&quot;: &quot;func3&quot;}
Menu, Tray, Icon, Shell32.dll, 44
loop
{
  For key, value in array
  {
  if WinActive(Key)
  {
     if (Opened%A_Index% != 1)
     {
        %value%(key)
        Opened%A_Index% := 1
     }
  }
  else Opened%A_Index% := 0
  }
    sleep, 1000
}
 
F12:: pause, toggle
#F12:: ExitApp

;1ый скрипт -------------------------- 
func1(tracked_app)
{
loop
{
   ; Do something
   sleep 1000
   if !WinActive(tracked_app)
      break
}
MsgBox, %tracked_app% is not active.
}

;2ой скрипт -------------------------- 
func2(tracked_app)
{
loop
{
   ; Do something
   sleep 1000
   if !WinActive(tracked_app)
      break
}
MsgBox, %tracked_app% is not active.
}

;3ий скрипт -------------------------- 
func3(tracked_app)
{
loop
{
   ; Do something
   sleep 1000
   if !WinActive(tracked_app)
      break
}
MsgBox, %tracked_app% is not active.
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2012-02-29T13:57:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=57353#p57353</id>
		</entry>
</feed>
