<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Синтаксис GetKeyState]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=18239</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18239&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Синтаксис GetKeyState».]]></description>
		<lastBuildDate>Fri, 28 Jun 2024 20:24:02 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161212#p161212</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>https://claude.ai уже получше код для второй версии генерирует.</p></blockquote></div><p>OFF: Потестил, да не, не особо хорошо пока что. Тоже несуществующий синтаксис выдумывает. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Кстати, зарегиться из России тот ещё квест. Если кто любит головоломки, попробуйте.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 28 Jun 2024 20:24:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161212#p161212</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161211#p161211</link>
			<description><![CDATA[<p>Похоже, что с KeyWait и его работой на малых значениях таймаута я был неправ. Все он нормально и стабильно работает и цикла действительно не нужно. Видимо нестабильная работа KeyWait была вызвана хаотичной работой предыдущей &quot;разработки&quot;...</p><p>Отслеживается нажатие кнопок HK_Left и HK_Right, кнопок поворота техники (обычно A и D)<br />Если длительность нажатой кнопки больше определенного значения (Slide_var_decimal) - скрипт проверяет, попадает ли цвет индикатора режима подвески в диапазон тонов, соответствующий ВКЛЮЧЕННОМУ скоростному режиму работы подвески и если да - то кликает кнопкой HK_Gidro, переводя подвеску из скоростного режима в режим маневрирования. После чего ожидает отпускания кнопки K_Left и HK_Right. </p><p>При отпускании кнопок или если кнопки удерживались меньше определенного значения (Slide_var_decimal), скрипт проверяет цвет индикатора подвески на включенный режим маневрирования и если попадает в тон, то кликает кнопкой HK_Gidro, переводя подвеску из режима маневрирования ОБРАТНО в скоростной режим. </p><p>Суть сейчас это выглядит вот так,<br />Функция вызываемая Ноткеу<br /></p><div class="codebox"><pre><code>KeyL()
{
	If !GetKeyState(HK_Right, &quot;p&quot;)
	{
		KeyWait %HK_Left%, T%Slide_var_decimal%
		if ErrorLevel
		{
			PixelGetColor, col, % posX, % posY, Alt
			If (var_max_on &gt; col) and (var_min_on &lt; col)
			{
				SendInput {%HK_Gidro%}
			}
			KeyWait, %HK_Left%
			sleep, 300
		}
		PixelGetColor, col, % posX, % posY, Alt
		If (var_max_off &gt; col) and (var_min_off &lt; col)
		{
			SendInput {%HK_Gidro%}
		}
	}
}</code></pre></div><p>и вторая такая же функция и Hotkey на кнопку поворота вправо.</p><p>Sleep, 300 - это внутреннее КД в игре при переводе в скоростной режим.</p>]]></description>
			<author><![CDATA[null@example.com (RacalCucumber)]]></author>
			<pubDate>Fri, 28 Jun 2024 15:29:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161211#p161211</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161210#p161210</link>
			<description><![CDATA[<p><strong>RacalCucumber</strong> Опишите что делает скрипт, в какой момент нужно ожидать от пользователя реакцию (нажатие клавиши). Возможно цикл будет не нужен вообще.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Fri, 28 Jun 2024 15:15:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161210#p161210</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161209#p161209</link>
			<description><![CDATA[<p>Клавиатурный хук реализуется в Input и InputHook().</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 28 Jun 2024 14:56:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161209#p161209</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161208#p161208</link>
			<description><![CDATA[<p>Теперь бы мне еще понять, что такое этот самый хук...</p>]]></description>
			<author><![CDATA[null@example.com (RacalCucumber)]]></author>
			<pubDate>Fri, 28 Jun 2024 14:11:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161208#p161208</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161207#p161207</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Если в цикле есть пауза, то есть риск, что нажатие попадёт на паузу; если паузу не делать, то будет грузить процессор.</p></blockquote></div><p>А, вы имеете в виду другой пример, где отсчитывается пауза в 300мс(sleep, 300). Да, это не самое лучшее решение.</p><p>В моем случае цикл ждет отпускания кнопки. Шансов, что кто-то осилит отпустить и нажать кнопку со скоростью более 10мс (sleep, 10) довольно мала. И в любом случае далее код все равно проверяет через PixelGetColor состояние элемента управления в игре, поэтому даже ошибочное срабатывание не приведет к десинхронизации между игрой и скриптом.</p>]]></description>
			<author><![CDATA[null@example.com (RacalCucumber)]]></author>
			<pubDate>Fri, 28 Jun 2024 12:24:10 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161207#p161207</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161206#p161206</link>
			<description><![CDATA[<div class="quotebox"><cite>RacalCucumber пишет:</cite><blockquote><p>не очень хорошая чем?</p></blockquote></div><p>Если в цикле есть пауза, то есть риск, что нажатие попадёт на паузу; если паузу не делать, то будет грузить процессор.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 28 Jun 2024 12:07:08 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161206#p161206</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161205#p161205</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Но вообще проверять состояние клавиш в цикле не очень хорошая идея, для этого есть Input или InputHook.</p></blockquote></div><p>не очень хорошая чем? Потребляемыми ресурсами или временем отклика? </p><p>В моем случае есть нюанс. Время длительности удержания клавиши, как вы заметили, достаточно маленькое, исчисляемое в лучшем случае пятью циклами sleep, 10. Я как-то пробовал использовать функцию keywait (в другом месте и по другому поводу) с опцией таймаута и у меня возникло ощущение, что на значениях менее секунды оно не работает так, как должно. По крайней мере не так, как ожидается. Поэтому я как бы стараюсь избегать в данных случаях использования команд с опцией Tхх со значениями менее секунды. </p><p>А так да, весь цикл заменяется одним keywait и условием if ErrorLevel {....}</p>]]></description>
			<author><![CDATA[null@example.com (RacalCucumber)]]></author>
			<pubDate>Fri, 28 Jun 2024 08:37:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161205#p161205</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161204#p161204</link>
			<description><![CDATA[<p>Попробую. Да и ChatGPT 4o может нормально писать, но лучше ему пример синтаксиса сразу в чате привести.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 27 Jun 2024 20:14:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161204#p161204</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161203#p161203</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Не стоит доверять AI написание AHK-кода. Точнее, можно это делать, но лишь для того, чтобы он подкинул идею, но не для бездумного копирования.</p></blockquote></div><p><a href="https://claude.ai">https://claude.ai</a> уже получше код для второй версии генерирует.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 27 Jun 2024 18:45:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161203#p161203</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161202#p161202</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Не спорю, легче Хук установить какой на нужные клавиши и не париться. Ждём ТС с его комментариями.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Thu, 27 Jun 2024 17:16:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161202#p161202</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161201#p161201</link>
			<description><![CDATA[<p>Тогда извиняюсь перед ChatGPT. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Проще так:<br /></p><div class="codebox"><pre><code>ListKey := [&quot;q&quot;, &quot;w&quot;, &quot;e&quot;, &quot;a&quot;, &quot;s&quot;, &quot;d&quot;]	; Список необходимых клавиш.
Return

F2::
while !GetKeyState(&quot;q&quot;) {
    t := &quot;&quot;
    for k, v in ListKey {
        t .= v . &quot;: &quot; . GetKeyState(v, &quot;p&quot;) . &quot; &quot;
    }
    ToolTip % t
    Sleep 300
}
ToolTip
Return</code></pre></div><p>Но вообще проверять состояние клавиш в цикле не очень хорошая идея, для этого есть Input или InputHook.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 27 Jun 2024 15:36:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161201#p161201</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161200#p161200</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Код мой, полностью. Боту только описание доверил. Если бы RacalCucumber указал более качественные примеры, может бы решил иначе составить код.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Thu, 27 Jun 2024 15:13:19 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161200#p161200</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161198#p161198</link>
			<description><![CDATA[<p>На самом деле код кривоватый. Не стоит доверять AI написание AHK-кода. Точнее, можно это делать, но лишь для того, чтобы он подкинул идею, но не для бездумного копирования.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 26 Jun 2024 21:44:51 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161198#p161198</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Синтаксис GetKeyState]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=161197#p161197</link>
			<description><![CDATA[<p>Не проблема:</p><div class="codebox"><pre><code>ListKey := [&quot;q&quot;, &quot;w&quot;, &quot;e&quot;, &quot;a&quot;, &quot;s&quot;, &quot;d&quot;]	; Список необходимых клавиш.
Return

F2::	; Запуск проверки нажатых клавиш:
Start := 1
While(Start){
 Temp := ListKey[1]	; Отдельно в переменной храним строку первой клавиши, но зачем? Чисто для примера разве.
 Start := !GetKeyState(Temp, &quot;p&quot;)	; Проверяем состояние клавиши, записываем ОБРАТНЫЙ результат в переменную &#039;Start&#039;, дабы работал цикл.

 T := &quot;&quot;
 Loop, % ListKey.Count(){
  Temp := ListKey[A_Index]
  T .= Temp &quot;: &quot; GetKeyState(Temp, &quot;p&quot;) &quot;  &quot;
 }

 ToolTip, % T
 Sleep, 300
}
ToolTip
Return</code></pre></div><p>От бота:</p><div class="quotebox"><blockquote><p>F2:: начинает блок кода, который выполняется при нажатии клавиши F2.<br />Start := 1 устанавливает переменную Start в 1, запуская цикл While.<br />While(Start){ ... } создает бесконечный цикл, который будет выполняться, пока Start равно 1.<br />Temp := ListKey[1] сохраняет первую клавишу из списка ListKey в переменную Temp. Это делается, но на самом деле эта строка не нужна для функциональности программы.<br />Start := !GetKeyState(Temp, &quot;p&quot;) проверяет состояние клавиши, сохраненной в Temp. GetKeyState(Temp, &quot;p&quot;) возвращает 1, если клавиша нажата, и 0, если не нажата. !GetKeyState(Temp, &quot;p&quot;) инвертирует это значение, поэтому Start становится 0, когда клавиша нажата, что завершает цикл.<br />Loop, % ListKey.Count() начинает цикл, который перебирает все элементы массива ListKey.<br />Temp := ListKey[A_Index] сохраняет текущий элемент массива в переменную Temp.<br />T .= Temp &quot;: &quot; GetKeyState(Temp, &quot;p&quot;) &quot;&nbsp; &quot; создает строку T, содержащую информацию о состоянии каждой клавиши из списка ListKey.<br />ToolTip, % T выводит всплывающую подсказку с текущим состоянием клавиш.<br />Sleep, 300 приостанавливает выполнение скрипта на 300 миллисекунд.<br />ToolTip закрывает всплывающую подсказку после окончания цикла.<br />Return завершает обработчик горячей клавиши F2.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Wed, 26 Jun 2024 19:38:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=161197#p161197</guid>
		</item>
	</channel>
</rss>
