<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=6108&amp;type=atom" />
	<updated>2012-06-29T20:31:52Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=6108</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61288#p61288" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Хм, а зачем? <strong>Grey</strong>style? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Так ведь код читать неудобно.</p></blockquote></div><p>Дело вкуса...</p></blockquote></div><p>Именно так.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2012-06-29T20:31:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61288#p61288</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61273#p61273" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>не решается ли проблема однопоточности путем запуска нескольких экземпляров AHK? Ну, к примеру, - в одном экземпляре - таймер, а во втором - шедулер с конструкцией, отслеживающей его состояние?</p></blockquote></div><p>Решится, но лучше использовать те функции. Причины:<br />1) непредвиденное падение экземпляра с таймером приведёт к зависанию ожидающего скрипта.<br />2) новый скрипт будет съедать значительно больше ресурсов, чем поток.<br />3) в начале ожидания курсор примет &quot;ожидающий вид&quot;(как при запуске оконных приложений) и провесит так несколько секунд.<br />Так что лучше скопировать функции FreeWaitFunc и CreateWaitFunc в отдельный файл и при необходимости подключать его к скрипту(#Include FileName).</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2012-06-29T09:14:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61273#p61273</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61268#p61268" />
			<content type="html"><![CDATA[<p>Упс <img src="//forum.script-coding.com/img/smilies/roll.png" width="15" height="15" /> Спасибо, очень доходчиво про timer. Но пример, чувствую, долго жевать буду. В функцию глянул, даже пытаться разбирать не стану <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" />, это уже явно выше моего потолка.<br />А пока традиционно дилетантский вопрос: не решается ли проблема однопоточности путем запуска нескольких экземпляров AHK? Ну, к примеру, - в одном экземпляре - таймер, а во втором - шедулер с конструкцией, отслеживающей его состояние?</p>]]></content>
			<author>
				<name><![CDATA[Korobkof]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=28148</uri>
			</author>
			<updated>2012-06-29T05:54:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61268#p61268</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61264#p61264" />
			<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>2012-06-28T20:38:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61264#p61264</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61263#p61263" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Хм, а зачем? <strong>Grey</strong>style? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Так ведь код читать неудобно.</p></blockquote></div><p>Дело вкуса, я наоборот не люблю когда один аргумент(или как эту конструкцию назвать?) разбивается на два слова.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2012-06-28T20:01:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61263#p61263</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61260#p61260" />
			<content type="html"><![CDATA[<p>Хм, а зачем? <strong>Grey</strong>stile? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Так ведь код читать неудобно.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2012-06-28T18:45:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61260#p61260</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61259#p61259" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>ahk_classAutoHotkey</p></blockquote></div><p>Здесь, очевидно, пробел выпал.</p></blockquote></div><p>Нет, я специально не оставлял пробелов ни в классе, ни в PID&#039;е.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2012-06-28T18:10:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61259#p61259</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61258#p61258" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>ahk_classAutoHotkey</p></blockquote></div><p>Здесь, очевидно, пробел выпал.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2012-06-28T16:30:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61258#p61258</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61240#p61240" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>Насколько я понимаю, создается тот самый таймер</p></blockquote></div><p>Да.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>ему передаются параметры - дважды 0 (что это?)</p></blockquote></div><p>Первый- это указатель на атрибуты защиты, указывая ноль мы говорим, что особых атрибутов нам не надо, пусть будут по-умолчанию. Почти всегда передают ноль, более подробно стоит разбирать этот параметр только тем, кто всерьёз собирается программировать под windows.<br />Второй отвечает за сброс события: 0- автоматический сброс, 1- ручной. Если таймер используется только один раз, то не важно что передавать.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>&quot;name&quot; (как поясняет автор скрипта это - произвольное имя таймера; оно зачем - можно потом по нему обращаться к нему? или как?);</p></blockquote></div><p>Не совсем произвольное- это имя объекта ядра. Нас оно не интересует, можно передавать ноль- тогда будет создан неименованный объект.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>&quot;UInt&quot;, видимо, - тип возвращаемого значения (зачем оно и каким может быть?).</p></blockquote></div><p>Да, это тип возвращаемого значения. Возвращается описатель(handle) созданного таймера, он нам необходим для дальнейшей работы с таймером. Тип должен быть &quot;ptr&quot;, дальше будет пример, где все типы указаны правильно.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>Судя по слову &quot;Cancel&quot; и параметру, соответствующему ранее возвращенному значению, в зависимости от последнего таймер отменяется (отключается? уничтожается?). Это что-то типа ErrorLevel?</p></blockquote></div><p>Скорее &quot;отключается&quot;, т.е. объект &quot;таймер&quot; всё ещё существует и его можно использовать. Для уничтожения таймера нужно закрыть все хендлы функцией CloseHandle.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>Тут вообще понятно только относительно &quot;duetime&quot;, это время срабатывания таймера в формате UTC-file-time. Что задают остальные передаваемые параметры?</p></blockquote></div><p>1- ранее созданный таймер<br />2- либо дата первого срабатывания, либо промежуток через который таймер должен сработать, чтобы задать промежуток нужно передать отрицательное значение(например -50000000, означает через 5 секунд).<br />3- период срабатывания в миллисекундах. Т.е. после того как таймер сработает первый раз, он будет ещё и периодически срабатывать через указанный тут период. 0- значит не нужно периодического срабатывания.<br />4- функция завершения ожидания, в данном случае она нас не интересует из-за особенностей её срабатывания(поток должен быть в состоянии ожидания для её срабатывания)<br />5- параметр, который будет передан в функцию из четвёртого параметра<br />6- не помню, всегда ноль ставят <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>И что дает эта конструкция, выходных-то данных никаких нет? Или выполнение скрипта на этом месте останавливается до наступления указанного времени?</p></blockquote></div><p>Функция возвращает 0 в случае неудачи, иначе таймер успешно установлен. Т.е. объект &quot;таймер&quot; перейдёт в сигнальное состояние в указанное время.<br /></p><div class="quotebox"><cite>Korobkof пишет:</cite><blockquote><p>Имеет ли этот участок кода отношение к таймеру и если да, то какое?</p></blockquote></div><p>WaitForSingleObject- ожидает перехода таймера(на самом деле почти любого объекта) в сигнальное состояние.<br />CloseHandle- уничтожает таймер.<br />WaitForSingleObject блокирует поток до наступления события, а AHK не поддерживает многопоточность. Для выхода из этой ситуации можно воспользоваться функциями из <a href="http://forum.script-coding.com/viewtopic.php?pid=56111">этой темы</a>(из второго поста).<br />Пример:<br /></p><div class="codebox"><pre><code>#persistent
DetectHiddenWindows On
WinGet, hWnd, id, % &quot;ahk_classAutoHotkey ahk_pid&quot; . DllCall(&quot;GetCurrentProcessId&quot;)
OnMessage(0x401, &quot;DlgProc&quot;)
hTimer := DllCall(&quot;CreateWaitableTimer&quot;, &quot;ptr&quot;, 0, &quot;int&quot;, 1, &quot;ptr&quot;, 0, &quot;ptr&quot;)
if (hTimer == 0)
{
   msgbox не удалось создать таймер
   ExitApp
}
EventProc := CreateWaitFunc(hTimer, hWnd, 0x401)
liDueTime := -50000000
x := DllCall(&quot;SetWaitableTimer&quot;, &quot;ptr&quot;, hTimer, &quot;int64*&quot;, liDueTime, &quot;int&quot;, 0, &quot;ptr&quot;, 0, &quot;ptr&quot;, 0, &quot;int&quot;, 0)
if (!x)
{
   msgbox не удалось установить таймер
   ExitApp
}
DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, DllCall(&quot;CreateThread&quot;, &quot;ptr&quot;, 0, &quot;ptr&quot;, 0, &quot;ptr&quot;, 0|EventProc, &quot;ptr&quot;, 0, &quot;uint&quot;, 0, &quot;ptr&quot;, 0))
return

DlgProc(wParam, lParam, msg, hWnd)
{
   global EventProc
   if(msg==0x401)
   {
      msgbox таймер сработал
	  FreeWaitFunc(EventProc)
	  DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, wParam)
	  ExitApp
   }
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2012-06-27T12:20:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61240#p61240</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61238#p61238" />
			<content type="html"><![CDATA[<p>Кто-то на этом форуме уже жаловался на заболевание &quot;гуманитарий головного мозга&quot;, вот у меня тоже... в тяжелой форме... Посему укурка доступных источников что-то застопорилась. Все попавшиеся мне описания WaitableTimer подразумевают наличие массы базовых познаний, которыми я не располагаю. Ну или массы времени, чтобы получить эти познания, которое тоже в нехватке <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" />. Применительно к AHK нашлось <a href="http://www.autohotkey.com/community/viewtopic.php?t=11620">такое решение</a>. Можно, конечно, попытаться тупо скопировать нужный кусок, но мое эстетическое чувство, этот генератор проблем и убийца времени, при одной такой мысли начинает буянить. А раз так, в расчете на еще одну любезность корифеев, вываливаю свои вопросы.</p><div class="codebox"><pre><code>Handle:=DLLCall(&quot;CreateWaitableTimer&quot; 
            ,&quot;char *&quot;, 0 
            ,&quot;Int&quot;,0 
            ,&quot;Str&quot;,name, &quot;UInt&quot;)</code></pre></div><p>Насколько я понимаю, создается тот самый таймер, ему передаются параметры - дважды 0 (что это?) и &quot;name&quot; (как поясняет автор скрипта это - произвольное имя таймера; оно зачем - можно потом по нему обращаться к нему? или как?); &quot;UInt&quot;, видимо, - тип возвращаемого значения (зачем оно и каким может быть?).</p><div class="codebox"><pre><code>DLLCall(&quot;CancelWaitableTimer&quot;,&quot;UInt&quot;,handle)</code></pre></div><p>Судя по слову &quot;Cancel&quot; и параметру, соответствующему ранее возвращенному значению, в зависимости от последнего таймер отменяется (отключается? уничтожается?). Это что-то типа ErrorLevel?</p><div class="codebox"><pre><code>DLLCall(&quot;SetWaitableTimer&quot; 
          ,&quot;Uint&quot;, handle 
          ,&quot;Int64*&quot;, duetime 
          ,&quot;Int&quot;, 1000 
          ,&quot;uint&quot;,0 
          ,&quot;uint&quot;,0 
          ,&quot;int&quot;,resume)</code></pre></div><p>Тут вообще понятно только относительно &quot;duetime&quot;, это время срабатывания таймера в формате UTC-file-time. Что задают остальные передаваемые параметры? И что дает эта конструкция, выходных-то данных никаких нет? Или выполнение скрипта на этом месте останавливается до наступления указанного времени?</p><div class="codebox"><pre><code>Signal:=DLLCall(&quot;WaitForSingleObject&quot; 
            ,&quot;Uint&quot;, handle 
            ,&quot;Uint&quot;,-1) 
DllCall(&quot;CloseHandle&quot;, uint, Handle)</code></pre></div><p>Имеет ли этот участок кода отношение к таймеру и если да, то какое?</p><p>____________________________________<br />будьте снисходительны - я профан</p>]]></content>
			<author>
				<name><![CDATA[Korobkof]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=28148</uri>
			</author>
			<updated>2012-06-27T11:27:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61238#p61238</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61235#p61235" />
			<content type="html"><![CDATA[<p>Премного благодарен за разъяснения. В какой-то момент, а точнее в момент<br /></p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Таймер, он вроде для таких ситуаций и существует <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p></blockquote></div><p>померещилась мне окончательная ясность и я сваял такой, с позволения сказать, код:<br /></p><div class="codebox"><pre><code>Gui, Add, DateTime, vTimeToAlert 1 w60, HH:mm
Gui, Add, Button, r1 w60, CTAPT
Gui, Show, AutoSize
Return
  
ButtonCTAPT:

Gui, Submit
StringMid, TimeH, TimeToAlert, 9, 2
StringMid, TimeM, TimeToAlert, 11, 2
TimeToWait:=(TimeH*60*60*1000+TimeM*60*1000)-(A_Hour*60*60*1000+A_Min*60*1000)
if (TimeToWait&lt;=0 )
TimeToWait:= TimeToWait+24*60*60*1000

SetTimer, Alert, %TimeToWait%
return

Alert:
msgbox its work!!!
SetTimer, Alert, Off 
ExitApp</code></pre></div><p>Но теперь я так понимаю, что речь-то шла не про тот timer...<br /></p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>... NtUserSetTimer ... CreateWaitableTimer ... SetWaitableTimer ...</p></blockquote></div><p>Пойду попытаюсь вкурить что-нибудь на этот счет...</p><p>____________________________________<br />будьте снисходительны - я профан</p>]]></content>
			<author>
				<name><![CDATA[Korobkof]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=28148</uri>
			</author>
			<updated>2012-06-27T05:05:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61235#p61235</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61214#p61214" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А что, должно повлиять?</p></blockquote></div><p>Ну а как иначе. Допустим сейчас час ночи, тогда задачи &quot;выполнить через час&quot; и &quot;выполнить в два часа ночи&quot; разнятся, поскольку переведя часы на час назад можно отложить выполнение условия. Кстати, WaitableTimer работает со временем по Гринвичу, так что смена локального времени на неё не повлияет.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2012-06-25T21:31:17Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61214#p61214</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61213#p61213" />
			<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>2012-06-25T20:15:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61213#p61213</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61212#p61212" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>В качестве будильника сработает и обычный, если задать время одним промежутком.</p></blockquote></div><p>А если время переведут? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2012-06-25T19:54:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61212#p61212</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Можно-ли  сделать с помощью AHK БУДИЛЬНИК ?]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61211#p61211" />
			<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>2012-06-25T19:52:37Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61211#p61211</id>
		</entry>
</feed>
