<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: MasterScript (менеджер .ahk скриптов)]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8724&amp;type=atom" />
	<updated>2014-11-15T13:59:03Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8724</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88371#p88371" />
			<content type="html"><![CDATA[<p><strong>Drugoy</strong>, пожалуйста.<br />По поводу лагов с <em>Thread, NoTimers </em>или<em> Thread, Priority, 9001</em> дело в том, что при срабатывании OnMessage() новый поток не работает постояно, а быстро завершает свою работу, потом снова срабатывает и т.д. Таймер в перерывах запускает memoryScanFunc(), который и подвешивает перемещение окна. В пользу этого говорит небольшой проверочный код, попробуй подвигать окно или его границы.<br /></p><div class="codebox"><pre><code>WinMoveResize(wParam, lParam)
{
   Static c:=0
   tooltip % c++
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-11-15T13:59:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88371#p88371</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88365#p88365" />
			<content type="html"><![CDATA[<p>Пропатчил скрипт в репозитории:<br />+ включил исправление от Irbis, исправляющее лаги отрисовки передвигаемого окна<br />+ добавил контекстных меню (с &quot;умными&quot; проверками, отключающими в них неприменимые для выбранного объекта действия [запрещено букмарчить букмарки])<br />+ в целях борьбы с зомби-процессами (процесс умер, а информация о нём осталась) заставил функцию kill() мгновенно обновлять и &#039;ManageProcesses&#039; ListView, и массив scriptsSnapshot, с данными о запущенных скриптах.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-11-14T19:40:41Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88365#p88365</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88363#p88363" />
			<content type="html"><![CDATA[<p><strong>Irbis</strong>, большое спасибо за столь тщательную, подробную и адресную помощь <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Последний вариант с обновлением таймера - очень изящное решение, но просто науки ради: а почему если в WinMoveResize() вместо этой строки попробовать прописать Critical, 50 или Thread, NoTimers или Thread, Priority, 9001 - эти решения не решают проблему лагов при движении окна?</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-11-14T16:23:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88363#p88363</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88344#p88344" />
			<content type="html"><![CDATA[<p>Оказалось все еще проще - при перемещении можно просто обновлять таймер, так что он просто будет откладываться при каждом срабатывании <em>OnMessage()</em><br />Эти строки остаются<br /></p><div class="codebox"><pre><code>OnMessage(0x3, &quot;WinMoveResize&quot;)
OnMessage(0x5, &quot;WinMoveResize&quot;)</code></pre></div><p>функция memoryScanFunc() остается в авторском виде.</p><p>Обработчик событий перемещения/изменения:<br /></p><div class="codebox"><pre><code>WinMoveResize(wParam, lParam) {
SetTimer, MemoryScan, %memoryScanInterval%
}</code></pre></div><p>Переменная <em>memoryScanInterval</em> должна быть объявлена глобальной в таком случае. (строка 26)</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-11-14T09:33:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88344#p88344</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88339#p88339" />
			<content type="html"><![CDATA[<p>Добавил cтрочку (1) в функцию сканирования памяти. Обновляться не будет во время перетаскивания и изменения размеров окна, лагов не наблюдается. Правда, если просто зажать ЛКМ в окне, обновление тоже приостановится.<br /></p><div class="codebox"><pre><code>memoryScanFunc()    ; LAGGY.
{
    Gui, ListView, ManageProcesses
    if !(WinActive(&quot;ahk_class AutoHotkeyGUI&quot;) &amp;&amp; GetKeyState(&quot;vk1&quot;, &quot;P&quot;))     ; (1)
    For k, v In scriptsSnapshot    ; Repeat as many times as there are running AHK-scripts.
    {
        newState := (isProcessSuspended(v.pid) ? 5 : 1 + getScriptState(v.pid))
        If (v.icon != newState)
            LV_Modify(k, &quot;Icon&quot; v.icon := newState)
    }
}</code></pre></div><p><strong>Upd:</strong> более &quot;правильное&quot; решение нашлось при помощи <em>OnMessage()</em><br />В секции автовыполнения:<br /></p><div class="codebox"><pre><code>OnMessage(0x3, &quot;WinMoveResize&quot;)
OnMessage(0x5, &quot;WinMoveResize&quot;)</code></pre></div><p>функция memoryScanFunc() примет вид:<br /></p><div class="codebox"><pre><code>memoryScanFunc()    ; LAGGY.
{
    Global LastTimeMoveOrResize
    Gui, ListView, ManageProcesses
    if !LastTimeMoveOrResize || (A_TickCount - LastTimeMoveOrResize &gt; 300)
    For k, v In scriptsSnapshot    ; Repeat as many times as there are running AHK-scripts.
    {
        newState := (isProcessSuspended(v.pid) ? 5 : 1 + getScriptState(v.pid))
        If (v.icon != newState)
            LV_Modify(k, &quot;Icon&quot; v.icon := newState)
    }
}</code></pre></div><p>Добавлена функция-обработчик перемещения/изменения размеров окна:<br /></p><div class="codebox"><pre><code>WinMoveResize(wParam, lParam)
{
   Global LastTimeMoveOrResize := A_TickCount
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-11-14T08:11:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88339#p88339</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88327#p88327" />
			<content type="html"><![CDATA[<p>Скорее всего это происходит из-за работы таймера. Нужно найти способ его приостанавливать на время перетаскивания, если скрипт предназначен для публикации, ибо подобные &quot;подлагивания&quot; очень раздражают, имхо, конечно.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-11-13T19:24:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88327#p88327</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88326#p88326" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong><br />похоже, что с этим, увы, ничего нельзя поделать <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /><br />Я сначала подумал, что это из-за частого употребления LV_Modify() внутри функции memoryScanfunc(), вызываемой через метку MemoryScan, которая выполняется по таймеру, но я обновил скрипт переделав в нём memoryScanfunc() так, что LV_Modify() используется только тогда, когда у процесса какого-то скрипта сменилось состояние и ему надо сменить иконку в списке на 2-ой вкладке. Но это не помогло.</p><p>Похоже, что без замораживания таймера на время перетаскивания окна (а это, боюсь, что чревато негативными последствиями) никак не получится победить эти подлагивания при перетаскивании окна.</p><p>Я до сих пор мало понимаю в нитях и их приоритетах, и мне кажется тут никакие Critical/Priority/Thread не помогут, но если я ошибаюсь - подскажите что надо сделать.</p><p>Кстати, странно, но иногда этот глюк пропадает сам собой на какое-то время, но потом возвращается.</p><p>p.s.: в обновлённой версии также подправил работу всех командных кнопок так, чтобы если в списке процессов была выбрана группа процессов включая процесс самого masterscript&#039;а, то действия бы надёжно выполнялись для всех процессов, а не прекращались бы на обработке masterscript&#039;а, как это было раньше.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-11-13T18:49:55Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88326#p88326</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88250#p88250" />
			<content type="html"><![CDATA[<p>Попробуйте запустить скрипт и плавно двигать его окно за заголовок от одного края экрана к другому.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-11-12T21:23:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88250#p88250</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88246#p88246" />
			<content type="html"><![CDATA[<p>Вроде исправил этот досадный баг последним коммитом.<br />+ добавил кнопки Open и Edit.<br />+ раньше нельзя было управлять процессом самого мастер-скрипта. Теперь можно (правда теперь есть чуть более новый баг <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" />).</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-11-12T19:37:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88246#p88246</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=87811#p87811" />
			<content type="html"><![CDATA[<p>Это происходит в одном из двух случаев: либо когда у этого скрипта открыто меню его иконки в трее (это, похоже, не вылечить), либо когда у процесса есть несколько окон: тогда не понятно по какому из них снимать состояние (но это, возможно, подправлю как-нибудь).</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-10-28T05:34:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=87811#p87811</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=87792#p87792" />
			<content type="html"><![CDATA[<p>У меня показывает некоторые скрипты, как Suspended, хотя это не так:</p><p><span class="postimg"><img src="http://i.imgur.com/G5UWk2q.jpg" alt="http://i.imgur.com/G5UWk2q.jpg" /></span></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-10-27T21:05:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=87792#p87792</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=87789#p87789" />
			<content type="html"><![CDATA[<p>Обновил скрипт (переписав внутренности уже n раз).<br />Теперь он следит за подключениями-отключениями съёмных дисков.<br />Закладки для папок были приделаны.<br />Скомбинировал пару кнопок для управления процессами, т.к. скрипт теперь умеет определять их текущее состояние.<br />Состояние скриптов показывается в виде иконок (см. скриншот в спойлере).<br />Работает даже заморозка процессов (только поосторожней с этой штукой, т.к. заморозка любого процесса в винде, который имеет хуки на мышиные нажатия, причиняет адские лаги курсору до момента разморозки или смерти процесса).</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Свежие скриншоты</div><div class="fancy_spoiler"><p><span class="postimg"><img src="https://i.imgur.com/LmUR9ye.png" alt="https://i.imgur.com/LmUR9ye.png" /></span></p><p><span class="postimg"><img src="https://i.imgur.com/SeTj5g7.png" alt="https://i.imgur.com/SeTj5g7.png" /></span></p></div></div><p>p.s.: я был бы рад, если б кто-нибудь попробовал скрипт и подсказал что в нём надо подправить, а что в него надо добавить.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2014-10-27T19:59:30Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=87789#p87789</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76210#p76210" />
			<content type="html"><![CDATA[<p>Обновление:<br />[+] Переделал дерево в &quot;Умное Дерево&quot;: теперь оно способно показывать большие структуры и достаточно быстро, за счёт того, что достраивание дерева происходит каждый раз, когда пользователь раскрывает какую-то его ветвь.<br />[x] Теперь навигация происходит по папкам не от &quot;startFolder&quot;, а от корней всех дисков (поддерживаются диски только FIXED и REMOVABLE типов).<br />[x] У разных типов дисков - разные иконки.</p><p>Критика:<br />1. Пока скрипт не следит за подключением новых/отключением старых дисков. Я знаю, как это исправить простым образом, но хотел исправить это &quot;продвинутым&quot; образом, но споткнулся на конфликте входящих вызовов OnMessage и исходящих вызовов ComObjGet, которые приводят к ошибке и поломке работы скрипта.<br />2. Стоит добавить в скрипт поддержу &quot;закладок&quot; для папок (добавление новых, построение дерева и удаление существующих). Скоро добавлю.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-10-20T16:32:49Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76210#p76210</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76090#p76090" />
			<content type="html"><![CDATA[<p>Indomito, извини, но я не вижу пока смысла вообще компилировать скрипты: основную массу скриптов я всё равно пишу под себя, на все домашние компы - я тоже уже поставил AutoHotkey.<br />Даже если ты носишь всё своё на флэшке и работаешь каждый раз на рандомных чужих компах - не вижу проблем закинуть на флэшку и автохоткей + менеджер ассоциаций расширений файлов для портабл флэшек (автоматом читает системные, потом прописывает нужные, а при завершении твоей работы с компом - может вернуть сохранённые системные назад как было).<br />А отдельные скрипты которые я пишу кому-то, у кого нет autohotkey - так это столь нечастая штука, что я скомпилировать вручную - нет никаких проблем, а уж для чего в этом случае может понадобиться .ini с описанием - хз.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-10-17T11:12:02Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76090#p76090</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: MasterScript (менеджер .ahk скриптов)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76068#p76068" />
			<content type="html"><![CDATA[<p><a href="http://forum.script-coding.com/profile.php?id=27463">Drugoy</a> Кстати, вот тебе идея - напиши компилятор скриптов. Я его начал писать и забросил по тех. проблемам - OS переустанавливать собрался... вот уже как 3 месяца собираюсь <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />А компилятор пакетный, т.е. через ini-файл, идея была такая.<br />Для каждого скрипта есть ini-файл и он указывается как параметр компилятору скриптов, а тот на его основе формирует ком. строку&nbsp; </p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;вот фрагмент</div><div class="fancy_spoiler"><div class="codebox"><pre><code>vTxt := &quot;Запуск компилятора&quot;
GuiControl,, Msg, % vTxt
Sleep, 1000
vTarget := &quot;Ahk2Exe.exe /in C:\AHK\AllSystemOS\AllSystemOS.ahk /out C:\ASOS.exe /icon C:\AHK\AllSystemOS\ASOS_RES\Os_Settings_Gear.ico /bin &quot;&quot;Unicode 32-bit.bin&quot;&quot; /mpress 1&quot;
; Рабочая папка компилятора
vWorkingDir := &quot;C:\Program Files (x86)\AutoHotkey\Compiler&quot;
; Запуск компилятора
Run, %vTarget% , %vWorkingDir%
sleep 1500 ; Чуть подождём = 1,5 сек
vTxt := &quot;Запускаем ASOS.exe&quot;
GuiControl,, Msg, % vTxt
Sleep, 1000
; Имя запускаемого процесса 
vTarget := &quot;ASOS.exe&quot;
; Его рабочая папка
vWorkingDir := &quot;C:\&quot;
; Запускаем ASOS.exe
Gui, Hide
Sleep, 3000
Run, %vTarget% , %vWorkingDir%
;Запускаем редактор Notepad++ , если он был запущен ранее
if (fNP){
    Sleep, 5000 
    Gui, Show
    vTxt := &quot;Запускаем редактор Notepad++&quot;
    GuiControl,, Msg, % vTxt
    Sleep, 1000
    vTarget := &quot;C:\Program Files (x86)\Notepad++\notepad++.exe&quot;
    vWorkingDir := &quot;C:\Users\SASA\AppData\Local\Temp\nppLocalization&quot;
    Run, %vTarget% , %vWorkingDir%
    sleep 1500 ; Чуть подождём = 1,5 сек
   }
; И выходим
gosub GuiClose
return 

lGui:
vTxt := &quot;Идёт компиляция скрипта&quot;
Gui, -resize -maximizebox -minimizebox +caption -Border +AlwaysOnTop +Owner
Gui, font, s18 Bold
Gui, Add, Text, x2 y80 w460 h180 +Center vMsg
Gui, Show, x603 y303 h185 w462
Return</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2013-10-17T03:14:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76068#p76068</id>
		</entry>
</feed>
