<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=4304&amp;type=atom" />
	<updated>2011-01-19T11:54:13Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=4304</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44054#p44054" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Так Вам в активное окно надо, я так понимаю, а не в определённое. Send это и делает.</p></blockquote></div><p>Перечитал матчасть и примеры, переосмыслил значение значка ~, стало многое понятно...<br />Спасибо Вам, YMP, за то что указали где мне &quot;копать&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Glebis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25766</uri>
			</author>
			<updated>2011-01-19T11:54:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44054#p44054</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44053#p44053" />
			<content type="html"><![CDATA[<p>Так Вам в активное окно надо, я так понимаю, а не в определённое. Send это и делает.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-19T11:41:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44053#p44053</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44050#p44050" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Потому и не работает, вероятно. Автоповтор же постоянно шлёт {клавиша down}, которые благодаря тильдам проходят в окно игры мимо скрипта.</p></blockquote></div><p>Это мне понятно. Но если убрать ~, что уберёт автоповтор и, соответственно, перкратит команды Send {клавиша down}, тогда хот кеи не будут отправляться в активное окно...</p>]]></content>
			<author>
				<name><![CDATA[Glebis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25766</uri>
			</author>
			<updated>2011-01-19T10:44:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44050#p44050</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44048#p44048" />
			<content type="html"><![CDATA[<p>Потому и не работает, вероятно. Автоповтор же постоянно шлёт {клавиша down}, которые благодаря тильдам проходят в окно игры мимо скрипта.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-19T10:13:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44048#p44048</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44045#p44045" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Автоповтор у Вас пропускают тильды (~), а также #MaxThreadsPerHotkey 200.</p></blockquote></div><p>Тогда я не могу понять, почему не раобтает Send {клавиша up}, если эта клавиша нажата физически?<br />Либо это какая-то особенность режима InputThenPlay?</p>]]></content>
			<author>
				<name><![CDATA[Glebis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25766</uri>
			</author>
			<updated>2011-01-19T10:02:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44045#p44045</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44044#p44044" />
			<content type="html"><![CDATA[<p>Автоповтор у Вас пропускают тильды (~), а также #MaxThreadsPerHotkey 200.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-19T09:52:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44044#p44044</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44042#p44042" />
			<content type="html"><![CDATA[<p>Извините меня за некропостинг, но не очень хочется создавать ещё одну тему с моими примитивными вопросами..</p><p>Я ломаю голову над задачами с элементарно простыми алгоритмами решения, но AHK интерпретируется действия алгоритма непонятным для меня образом. И чем больше пытаюсь понять интерпритатор, тем всё больше вопросов у меня возникает.</p><p>Иногда при интенсивном стрейфе в FPS играх из-за моей закоренелой привычки я могу одновременно удерживать нажатыми клавиши стрейфа A и D. И разные игры по разному это интерпритируют, зачастую не очень удачным образом.</p><p>Поэтому пытаюсь сделать такой скрипт: <br />Из 2х кнопок Ф и В (A и D) одновременно должна считаться нажатой ТОЛЬКО одна: та что нажата последней. <br />При отпускани одной из кнопок проверять, зажата ли физически вторая кнопка; если да то логически нажать её максимально похоже на сию секундное физическое нажатие. В частности должен заработать системный автоповтор клавиши, иначе игра может пропустить логическое нажатие.<br />Шапка:<br /></p><div class="codebox"><pre><code>Process, Priority, , H    ;повышенный приоритет программы
SetBatchLines -1        ;повышение производительности
#NoEnv            ;повышение производительности
#UseHook On        ;            
#InstallKeybdHook        ;
#InstallMouseHook        ;
#SingleInstance Force    ;только одна копия программы
#Persistent        ;постоянное выполнение
#MaxThreads 20        ;чтоб не вылетало на раб. стол
#MaxThreadsPerHotkey 200    ;чтоб не вылетало на раб. стол
#MaxHotKeysPerInterval 500;чтоб не вылетало на раб. стол
#MaxThreadsBuffer off    ;отключение буфера послед-ти нажатых клавиш
;#WinActivateForce    ;активация программы принудительно (не нужно)
CoordMode, Mouse, Screen    ;отн. координаты
SendMode InputThenPlay    ;метод send по умолчанию, самый универсальный</code></pre></div><p>Вариант 1:<br /></p><div class="codebox"><pre><code>~*$в::
Send {ф up}{в down} ;пробывал разделять send команды sleep`ами...
Keywait, в, L
if GetKeyState(&quot;ф&quot;, &quot;P&quot;)
Send {ф down}
Return

~*$ф::
Send {в up}{ф down}
Keywait, ф, L
if GetKeyState(&quot;в&quot;, &quot;P&quot;)
Send {в down}
Return</code></pre></div><p>Вариант 2:</p><div class="codebox"><pre><code>~*$в::
Send {ф up}{в down}
Return

~*$ф::
Send {в up}{ф down}
Return

~*$в up::
Send {в up}
if GetKeyState(&quot;ф&quot;, &quot;P&quot;)
Send {ф down}
Return

~*$ф up::
Send {ф up}
if GetKeyState(&quot;в&quot;, &quot;P&quot;)
Send {в down}
Return</code></pre></div><p>Я перепробывал кучу вариантов: с использованием хоткеев &quot;~ф &amp; в&quot;, тыкал sleepы повсюду,разделял send команды, разные sendmode, hotket offы. Но всерано команды Send {клавиша up}, как я понимаю, перекрывались из за системного автоповтора физически нажатой клавиши.</p><p>Прошу вашей помоши, ибо мой мозг больше ничего не может придумать против автоповтора. Поиск по форуму &quot;автоповтор&quot; тоже ничего путнего не выдаёт... <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p><p>Нужно также упомянуть: проверяя работу скрипта в текстовом редакторе все происходит довольно логично; работает автоповтор последней нажатой клавиши. А, например, игра Battlefield 2 игнорирут все возможные вариации команды Send {клавиша up} (как и 2 приведённых мною способа), если эта клавиша удерживается физически.:/</p>]]></content>
			<author>
				<name><![CDATA[Glebis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25766</uri>
			</author>
			<updated>2011-01-19T09:26:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44042#p44042</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=34108#p34108" />
			<content type="html"><![CDATA[<p>Да, забыл сменить.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2010-03-27T16:12:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=34108#p34108</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=34107#p34107" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>2teadrinker</strong>: используйте родной адрес сайта «http://www.script-coding.com» — он уже работает, а то я вижу в ссылках альтернативный адрес (поправил в посте выше).</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-03-27T16:05:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=34107#p34107</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=34101#p34101" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>1) Почему НИГДЕ не сказано, что при ФИЗИЧЕСКОМ удержании клавиши начинается её автоповтор.</p></blockquote></div><p>Как это не сказано? Вот <a href="http://msdn.microsoft.com/en-us/library/ms646267%28VS.85%29.aspx#_win32_Keystroke_Messages">здесь</a> разве не по-русски написано:<br /></p><div class="quotebox"><blockquote><p><strong>Keystroke Messages</strong></p><p>Pressing a key causes a WM_KEYDOWN or WM_SYSKEYDOWN message to be placed in the thread message queue attached to the window that has the keyboard focus. Releasing a key causes a WM_KEYUP or WM_SYSKEYUP message to be placed in the queue.</p><p>Key-up and key-down messages typically occur in pairs, <strong>but if the user holds down a key long enough to start the keyboard&#039;s automatic repeat feature, the system generates a number of WM_KEYDOWN or WM_SYSKEYDOWN messages in a row</strong>. It then generates a single WM_KEYUP or WM_SYSKEYUP message when the user releases the key.</p></blockquote></div><p>Это системная установка, AHK здесь не при чём.<br /></p><div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>1а) Как точно ведёт себя системный автоповтор клавиш при их ВИРТУАЛЬНОМ удержании разными режимами Sent команд? Тут я разобраться никак не могу.</p></blockquote></div><p>Почему не можешь? Попробуй разные режимы.<br /></p><div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>2) ... (дальше много текста, ниасилил) ...</p></blockquote></div><p>Просто напиши, какое поведение ты хотел бы получить.<br /></p><div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>3)При включении режима CapsLock (физ или вирт способом), постоянно отсылается команда {CapsLock down}?</p></blockquote></div><p>Нет, просто включается режим CapsLock.<br /></p><div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>4а) Почему &quot;ф&quot; команда отсылается активному окну, если перед ней нет &quot;~&quot;.</p></blockquote></div><p>&quot;ф&quot; команды не существует, вопрос не ясен. Кроме того, меня возникает подозрение, что ты не вполне понимаешь действие значка &quot;~&quot;.<br /></p><div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>4б) Почему &quot;msgbox 1&quot; срабатывает при ОТПУСКАНИИ &quot;ф&quot;, а не при нажатии?</p></blockquote></div><p>Читай внимательно статью <a href="http://www.script-coding.com/AutoHotkey/Hotkeys.html"><strong>Горячие клавиши для мыши, джойстика и клавиатуры</strong></a>. В параграфе <strong>Возможности горячих клавиш, доступные только в Windows не ниже NT, 2K и XP:</strong><br /></p><div class="quotebox"><blockquote><p>Вы можете задать произвольную комбинацию из двух клавиш (кроме кнопок джойстика), если поставите между ними символ &quot;&amp;&quot;. В следующем примере для того, чтобы запустить горячую клавишу, удерживая Numpad0, нажмите вторую клавишу:</p><div class="codebox"><pre><code>Numpad0 &amp; Numpad1::MsgBox Вы нажали Numpad1, удерживая Numpad0.
Numpad0 &amp; Numpad2::Run Notepad</code></pre></div><p><strong>В приведенном примере клавиша Numpad0 становится префиксной клавишей. Для префиксных клавиш также можно задать выполнение собственных операций, как показано в следующем примере, однако эти операции будут запущены только после того, как такая клавиша уже отпущена</strong>, и если в тот момент, когда вы начали ее нажимать, не были нажаты другие клавиши:</p></blockquote></div><div class="quotebox"><cite>Glebis пишет:</cite><blockquote><p>Где об этом написано? После таких сюрпризов нелестные слова в адрес разработчиков и HELPописателей вырываются сами собой...</p></blockquote></div><p>Ну, ты понял! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2010-03-27T13:23:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=34101#p34101</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Несколько вопросов по работе горячих клавиш и Sent режимов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=34088#p34088" />
			<content type="html"><![CDATA[<p>С основными функциями программы AHK, и вопросов не имею. Но вот чем больше я копаюсь с назначением горячих клавиш, тем меньше чего понимаю. Поэтому прошу знатоков подтвердить или исправить сделанные мною выводы.</p><p>1) Почему НИГДЕ не сказано, что при ФИЗИЧЕСКОМ удержании клавиши начинается её автоповтор. Я целый день долбался, пытаясь выяснить причину, почему скрипт тормозит безбожно при активации-удержании хоткея. Авторы скорее всего считают, что конечный пользователь сам должен до этого догадаться.<br />1а) Как точно ведёт себя системный автоповтор клавиш при их ВИРТУАЛЬНОМ удержании разными режимами Sent команд? Тут я разобраться никак не могу.</p><p>2) из описания SendInput и SendPlay:<br />2а) &quot;Кроме того они буферизуют физические нажатия на клавиши и кнопки мыши...&quot; - в какой буфер буферизирует -в буфер физ. нажатий?. Что дает эта буферизация - последовательность нажатий вместо одновременности?<br />2б)&quot; которые происходят во время посылки,&quot; - как я понимаю, буферизация ФИЗ нажатий ведётся ТОЛЬКО при ВИРТУАЛЬНЫХ нажатиях командами SendInput или SendPlay? Во всех остальных случаях ФИЗ нажатия не буферизируются.<br />2в) &quot; что не позволяет нажатиям пользователя смешиваться с теми, которые посылает скрипт. &quot;. Как я понимаю, виртуальный буфер перекрывает физический? А после опустошения виртуального выполняются команды из очереди команд физического буфера.<br />2г) #MaxThreadsBuffer off - какой буфер отключает эта команда: физический или виртуальный? Как я понял отключается виртуальный и работает только физический, и то ТОЛЬКО при использовании SendInput или SendPlay.</p><p>3)При включении режима CapsLock (физ или вирт способом), постоянно отсылается команда {CapsLock down}?</p><p>4) Пример:<br /></p><div class="codebox"><pre><code>ф::
msgbox 1
Return

~ф &amp; в::
msgbox 2
Return</code></pre></div><p>4а) Почему &quot;ф&quot; команда отсылается активному окну, если перед ней нет &quot;~&quot;. Почему нужно перелапачивать весь код &quot;а вдруг где есть ~ф&quot;<br />4б) Почему &quot;msgbox 1&quot; срабатывает при ОТПУСКАНИИ &quot;ф&quot;, а не при нажатии?<br />Где об этом написано? После таких сюрпризов нелестные слова в адрес разработчиков и HELPописателей вырываются сами собой...</p>]]></content>
			<author>
				<name><![CDATA[Glebis]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25766</uri>
			</author>
			<updated>2010-03-27T07:55:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=34088#p34088</id>
		</entry>
</feed>
