<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AutoHotkey для чайников!]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7439</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7439&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AutoHotkey для чайников!».]]></description>
		<lastBuildDate>Sun, 08 Apr 2018 12:32:49 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124534#p124534</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=357">AutoHotkey: в помощь начинающему изучать GUI</a></p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sun, 08 Apr 2018 12:32:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124534#p124534</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=119949#p119949</link>
			<description><![CDATA[<p><strong>Как использовать циклы вместо Goto.</strong></p><p>Многие начинающие кодеры с целью зациклить какой-либо набор действий применяют оператор Goto. Использование циклов в этом случае сделает ваш код более компактным и удобочитаемым.<br />Пример бесконечного цикла.<br />С Goto:<br /></p><div class="codebox"><pre><code>i := 0
Label:
   i++   ; увеличиваем i на единицу
   ToolTip % i
   Sleep, 300
   goto Label</code></pre></div><p>То же самое с Loop:<br /></p><div class="codebox"><pre><code>Loop  {
   ToolTip % A_Index
   Sleep, 300
}</code></pre></div><p>Здесь роль переменной-счётчика i играет встроенная переменная A_Index, которая автоматически увеличивается с каждой итерацией на единицу. Принципиальное отличие в том, что A_Index имеет смысл и доступна только внутри своего цикла, а переменную i можно изменить извне, что может привести к ошибке, если мы случайно используем эту же переменную где-то в другом месте.</p><p>Пример выхода из цикла по условию.<br />С Goto:<br /></p><div class="codebox"><pre><code>i := 0
Label1:
   i++
   ToolTip % i
   Sleep, 300
   if (i = 10)
      goto Label2
   goto Label1

Label2:
   ToolTip
   MsgBox, Завершено!
   return</code></pre></div><p>To же самое с Loop:<br /></p><div class="codebox"><pre><code>Loop  {
   ToolTip % A_Index
   Sleep, 300
   if (A_Index = 10)
      break
}

MsgBox, Завершено!
return</code></pre></div><p>Или проще:<br /></p><div class="codebox"><pre><code>Loop 10  {
   ToolTip % A_Index
   Sleep, 300
}

ToolTip
MsgBox, Завершено!
return</code></pre></div><p>Ещё аналогичный пример с until:<br /></p><div class="codebox"><pre><code>Loop  {
   ToolTip % A_Index
   Sleep, 300
} until A_Index = 10

ToolTip
MsgBox, Завершено!
return</code></pre></div><p>А следующий пример будет работать по-другому:<br /></p><div class="codebox"><pre><code>while A_Index &lt; 10  {
   ToolTip % A_Index
   Sleep, 300
}

ToolTip
MsgBox, Завершено!
return</code></pre></div><p>Здесь проверка условия идёт в начале цикла, если условие не выполняется, следующая итерация отменяется и цикл прерывается.</p><p>Применение цикла для посыла клавиш:<br /></p><div class="codebox"><pre><code>Space::
   while GetKeyState(&quot;Space&quot;, &quot;P&quot;)  {
      SendInput, f
      Sleep, 300
   }
   return</code></pre></div><p>Пока удерживается пробел, будет выполняться условие GetKeyState(&quot;Space&quot;, &quot;P&quot;) и будет посылаться f. Как только пробел будет отпущен, условие перестанет выполняться, и цикл завершится.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 09 Oct 2017 19:38:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=119949#p119949</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=114232#p114232</link>
			<description><![CDATA[<p><strong>Почему оператор присвоения = не работает так как в других языках?</strong></p><p>Оператор присвоения, в других языках программирования выглядящий как <span style="color: blue">=</span> , в AutoHotkey записывается как <span style="color: blue">:=</span>.<br />Оператор <span style="color: blue">=</span> так же существует, но его использование ограничено рядом правил и условностей. Крайне не рекомендуется использовать в своих скриптах оператор <span style="color: blue">=</span> до тщательного изучения особенностей работы с ним. Тем более что почти не существует случаев когда без применения оператора <span style="color: blue">=</span> нельзя обойтись.<br />Речь шла о <span style="color: blue">=</span> как операторе присвоения. Как оператор сравнения <span style="color: blue">=</span> используется наряду с другими (<span style="color: blue">&lt;</span>, <span style="color: blue">&gt;</span>, <span style="color: blue">&gt;=</span>, <span style="color: blue">&lt;=</span> и т.п.) самым привычным образом.</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sun, 26 Mar 2017 14:25:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=114232#p114232</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=95629#p95629</link>
			<description><![CDATA[<p><strong>Запись клавиш и их виртуальные коды</strong>. <br />В дополнение к <a href="http://forum.script-coding.com/viewtopic.php?pid=62543#p62543">первому посту</a>.<br />Запись горячей клавиши с помощью виртуального кода имеет смысл только если эта клавиша &quot;буквенно-символьная&quot; (назовём их - <strong>КБС</strong>), то есть тех которые при печати посылают разные символы, зависящие от текущего языка ввода активного окна. Остальные клавиши <a href="http://www.script-coding.com/AutoHotkey/KeyList.html">имеют свои имена</a>, записывать их через виртуальный код не имеет смысла, и вносит излишние &quot;непонятки&quot; в код.</p><p><strong>Использование виртуальных кодов в команде Send</strong>.<br />Например есть цель по клавише F12 нажать &quot;Ctrl+A&quot; (выделение всего текста, &quot;а&quot; - латинская) в активном окне.</p><div class="codebox"><pre><code>F12::Send ^{a}</code></pre></div><p>Если в момент нажатия F12 в окне английский язык ввода, то текст выделится (целевое назначение комбинации сработает), а вот если язык ввода будет например русский, то просто напечатается латинская&nbsp; &quot;а&quot;. Чтобы такого не случилось, и результат нажатия не зависел от языка ввода, КБС необходимо указать через виртуальный код.</p><div class="codebox"><pre><code>F12::Send ^{vk41}    ;  &quot;A&quot;</code></pre></div><p>Для получения виртуального кода или имени клавиши, определения его необходимости (КБС определяются как виртуальный код, остальные пишутся по имени), и получения имени клавиши из виртуального кода, можно воспользоватся <a href="http://forum.script-coding.com/viewtopic.php?pid=72459#p72459">AhkSpy</a>. </p><p>П.С. Добавляя виртуальный код в свой скрипт, не забывайте в комментарии указывать что он значит, особенно когда его постите на форуме.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 16 Jul 2015 12:29:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=95629#p95629</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=105176#p105176</link>
			<description><![CDATA[<p><strong>Как записать выражение в параметр команды, требующий строчного значения?</strong><br />Для примера возьмём команду <a href="http://ahkscript.org/docs/commands/Send.htm"><em>Send</em></a>. Предположим, нам нужно отправить в активное окно цифру. Всё просто:</p><div class="codebox"><pre><code>Send 5</code></pre></div><p>А если цифра находится в переменной? Тогда можно так:</p><div class="codebox"><pre><code>Var := 5
Send %Var%</code></pre></div><p>Но бывают случаи, когда отправить нужно <em>результат выражения</em> с переменными, например, их сумму, или произведение.<br />Вот так не получится:</p><div class="codebox"><pre><code>Var1 := 5
Var2 := 10
Send %Var1% + %Var2%</code></pre></div><p>Тем более, что &quot;+&quot; в данном случае будет интерпретироваться командой, как &quot;Shift&quot;.<br />Так тоже не выйдет:</p><div class="codebox"><pre><code>Var1 := 5
Var2 := 10
SendRaw %Var1% + %Var2%</code></pre></div><p>Теперь посылается просто строка &quot;5 + 10&quot;, а не сумма. Как же быть? Есть два варианта. Первый, более длинный — сначала отдельно вычислить результат выражения, сохранить его в переменной, и тогда уже отправлять, как в примере выше:</p><div class="codebox"><pre><code>Var1 := 5
Var2 := 10
Var3 := Var1 + Var2
Send %Var3%</code></pre></div><p>Но есть более &quot;продвинутый&quot; способ — если в начале параметра команды первым символом поставить знак процента с пробелом за ним, то дальше можно писать выражение любой длины и сложности, а в параметр будет записан его результат:<br /></p><div class="codebox"><pre><code>Var1 := 5
Var2 := 10
Send % Var1 + Var2</code></pre></div><p>Переменные в таком случае пишутся <span class="bbu">без обрамления в знаки процента</span>.</p><p>Иногда в описании параметров команд специально оговаривается, что параметр может быть выражением. Например, <a href="http://ahkscript.org/docs/commands/MouseMove.htm"><em>MouseMove</em></a>:</p><div class="quotebox"><blockquote><p>MouseMove, X, Y [, Speed, R]</p><p>X, Y<br />&nbsp; &nbsp; The x/y coordinates to move the mouse to, which <em>can be expressions</em>.</p></blockquote></div><p>В таком случае для записи выражения предварять его знаком процента с пробелом не нужно:</p><div class="codebox"><pre><code>Var1 := 400
Var2 := 200
CoordMode, Mouse, Screen
MouseMove, Var1 + Var2, Var1 - Var2</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 25 Nov 2014 21:25:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=105176#p105176</guid>
		</item>
		<item>
			<title><![CDATA[Re: AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=105175#p105175</link>
			<description><![CDATA[<p><strong>Имитация физического зажатия клавиши</strong></p><div class="codebox"><pre><code>
Send {vk41}         ; нажатие и отпускание клавиши &quot;a&quot;
Send {vk41 Down}    ; нажатие клавиши &quot;a&quot;
Send {vk41 Up}      ; отпускание клавиши &quot;a&quot;</code></pre></div><p>При физическом «зажатии» клавиши начинает генерироваться «автоповтор нажатий», некоторые программы, для использования в которых вы вероятно и пишете свой скрипт, воспринимают зажатие именно как непрерывную последовательность нажатий.</p><p>Например, при нажатии пробела «зажать» клавишу A(Ф), при следующем нажатии пробела — «отпустить»:<br /></p><div class="codebox"><pre><code>Space::
    If isKeyPressed := !isKeyPressed    ; Позволяет чередовать действия при нажатии пробела . При каждой проверке этого условия в переменную isKeyPressed записывается значение обратное её текущему значению.
        SetTimer, SendA, 40             ; Таймер позволяет отправлять нажатия каждые 40мс и не мешает скрипту в паузах «параллельно» выполнять прочие подпрограммы.
    Else
    {
        SetTimer, SendA, Off            ; Если это второе нажатие пробела — выключаем таймер
        Send {vk41 Up}                  ; Чтоб не возникло «залипание» отправляем отпускание клавиши.
    }
    KeyWait Space                       ; ждём физического отпускания пробела чтоб не перезапускать таймер при каждом нажатии пробела во время автоповтора нажатий пробела.
    return

SendA:
    Send {vk41 Down}
    return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 24 Aug 2012 12:25:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=105175#p105175</guid>
		</item>
		<item>
			<title><![CDATA[AutoHotkey для чайников!]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62543#p62543</link>
			<description><![CDATA[<p><strong>Почему не работает моя горячая клавиша?</strong></p><div class="codebox"><pre><code>q::MsgBox, Работает!
й::MsgBox, Работает!</code></pre></div><p>Иногда при при попытке запустить скрипт, в котором в качестве горячих используются буквенные клавиши, выскакивает&nbsp; ошибка:<br /></p><div class="quotebox"><blockquote><p>Error: Invalid hotkey.</p></blockquote></div><p>Восприятие скриптом горячих клавиш может зависеть от раскладки (ru-en) активного окна в данный момент, а также от раскладки по умолчанию. Чтобы обойти эту проблему при использовании клавиш, значение которых меняется в зависимости от раскладки, нужно вместо буквенного обозначения писать их виртуальные коды или скан-коды:<br /></p><div class="codebox"><pre><code>vk51::MsgBox, Работает в любой раскладке!   ; vk51 — виртуальный код клавиши Q-Й в шестнадцатеричном формате
sc11::MsgBox, Работает в любой раскладке!   ; sc10 — скан-код клавиши W-Ц в шестнадцатеричном формате</code></pre></div><p>Для определения виртуальных и скан-кодов можно воспользоваться <a href="https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd375731(v=vs.85).aspx">соответствующими</a> <a href="http://www.ee.bgu.ac.il/~microlab/MicroLab/Labs/ScanCodes.htm">таблицами</a>, командой <a href="http://l.autohotkey.net/docs/commands/KeyHistory.htm">KeyHistory</a>, а также <a href="http://forum.script-coding.com/viewtopic.php?id=5690">этой</a> программкой.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 08 Aug 2012 22:25:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62543#p62543</guid>
		</item>
	</channel>
</rss>
