<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: определение завершения набора текста командой SendInput]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13943&amp;type=atom" />
	<updated>2018-07-15T16:16:34Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13943</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: определение завершения набора текста командой SendInput]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=127089#p127089" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Mik пишет:</cite><blockquote><p>может ли так случиться, что после Send&#039;а BlockInput не отключится?</p></blockquote></div><p>Не знаю, не помню чтобы вообще пользовался.<br /></p><div class="quotebox"><cite>Mik пишет:</cite><blockquote><p>(как вариант &quot;костыля&quot;).</p></blockquote></div><p>Я так делал, а как ещё убедится в правильности ввода. Если инфо извлекается, то это самое надёжное.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-07-15T16:16:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=127089#p127089</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: определение завершения набора текста командой SendInput]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=127083#p127083" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br />Хм, действительно, остальные команды ждут окончания выполнения простого Send&#039;а. <br />Но при этом, если использовать: </p><div class="codebox"><pre><code>SetKeyDelay, 0</code></pre></div><p>то MsgBox также появляется раньше завершения набора...<br />P.S.: на самом деле использование Send/SendInput продиктовано только тем, что вставка в рабочее окно программы комбинацией Ctrl+V заблокирована на программном уровне - как обойти блокировку без имитации набора не знаю...</p><p>Также минусом Send является необходимость использования команды:<br /></p><div class="codebox"><pre><code>BlockInput, Send</code></pre></div><p>В связи с этим вопрос: может ли так случиться, что после Send&#039;а BlockInput не отключится? (Ведь тогда придется использовать кнопку reset на компе - а это весьма чревато...).</p><div class="quotebox"><blockquote><p>Пробуйте извлечь текст из окна и сравнивать с буфером.</p></blockquote></div><p>Написать функцию, которая будет, допустим, каждые 50 мс сверять количество набранных знаков в окне с количеством знаков в буфере - идея весьма хорошая (как вариант &quot;костыля&quot;). Нужно только подумать теперь как ее реализовать... <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Mik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33706</uri>
			</author>
			<updated>2018-07-15T13:55:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=127083#p127083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: определение завершения набора текста командой SendInput]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=127077#p127077" />
			<content type="html"><![CDATA[<p>Не знаю, у меня в блокноте MsgBox появляется только после ввода.<br /></p><div class="codebox"><pre><code>1::
	Send {Raw}%clipboard%
	MsgBox 
	return</code></pre></div><p>Пробуйте извлечь текст из окна и сравнивать с буфером.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-07-15T12:20:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=127077#p127077</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: определение завершения набора текста командой SendInput]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=127075#p127075" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, вставка SendInput происходит заметно быстрее, поэтому использую его.<br />Замена SendInput на Send описанную проблему не исправляет.</p>]]></content>
			<author>
				<name><![CDATA[Mik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33706</uri>
			</author>
			<updated>2018-07-15T12:00:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=127075#p127075</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: определение завершения набора текста командой SendInput]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=127072#p127072" />
			<content type="html"><![CDATA[<p>А почему именно SendInput а не Send?<br />Тем более что Send больше похож на имитацию набора.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2018-07-15T11:36:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=127072#p127072</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: определение завершения набора текста командой SendInput]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=127063#p127063" />
			<content type="html"><![CDATA[<p>Доброго времени суток!<br />Столкнулся с одной проблемой, которую никак не могу решить (в AHK новичок) - требуется помощь мастеров AHK.<br />В общем, требуется регулярная вставка текста, который содержится в буфере обмена. Причем не простая вставка, а именно имитация набора (для чего использую команду SendInput). <br />Текст может состоять из русских и английских символов различной длины. <br />Программа, в которую вставляется текст из буфера обмена, корректно распознает вставляемые символы <span class="bbu"><strong>только</strong> если раскладка окна переключена на английский язык</span>. При этом 99% времени приходится работать в программе на русской раскладке. В связи с этим переключать окно на английский перед вставкой, а потом обратно, &quot;руками&quot; неудобно. <br />Для решения проблемы использую следующий код:</p><div class="codebox"><pre><code>Home::
SendMessage, 0x50,, 0x4090409,, A ; перед вставкой переключаю активное окно на английский
cpbd = %clipboard%
TimeSleep := (StrLen(cpbd) * 3) ; &quot;костыль&quot; для расчета времени Sleep в зависимости от числа символов в буфере
if TimeSleep &lt;= 50
{
	SendInput {Raw}%clipboard%
	Sleep, 50
} 
else 
{
	SendInput {Raw}%clipboard%
	Sleep, %TimeSleep%
}
SendMessage, 0x50,, 0x4190419,, A ; возвращаю активному окну русский язык
return
</code></pre></div><p>И всё было бы хорошо, если бы не один серьёзный минус: перед отработкой команды, которая возвращает окну русский язык, используется &quot;костыль&quot; в виде команды Sleep.<br />Дело в том, что если в программе работать из локальной сети, то всё ОК, но в последнее время всё чаще приходится работать удаленно - в результате прога регулярно подвисает. И как следствие этого, времени в Sleep&#039;е просто не хватает и на русский окно переключается раньше времени, что приводит к некорректной вставке знаков и английских символов.<br />Увеличивать время в Sleep&#039;е нерационально.</p><p>В связи с этим, возник вопрос: как можно определить, что вставка текста командой SendInput в окно программы закончена (т.е. текст точно полностью успел напечататься)?</p>]]></content>
			<author>
				<name><![CDATA[Mik]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33706</uri>
			</author>
			<updated>2018-07-14T18:21:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=127063#p127063</id>
		</entry>
</feed>
