<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: как повысить надежность ControlSend]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8064</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8064&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: как повысить надежность ControlSend».]]></description>
		<lastBuildDate>Tue, 12 Feb 2013 09:18:00 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69386#p69386</link>
			<description><![CDATA[<p>Чтобы избежать ошибок после ввода, проверяйте с помощью ControlGetText. <br />Функция ControlSendText должна также учитывать регистр при проверке.<br />Вместо ControlSend используется ControlSendRaw<br /></p><div class="codebox"><pre><code>
SetTitleMatchMode, 2
Text := &quot;красный зеленый синий&quot;

ControlSendText(&quot;WindowsForms10.EDIT.app.0.2004eee8&quot;, &quot;ahk_class WindowsForms10.Window.8.app.0.2004eee&quot;, WinText, Text)
MsgBox %Text%
Return
;_____________________________ ControlSendText _____________________________ 

ControlSendText(Control, WinTitle, WinText, Text)
{
ControlFocus, %Control%, %WinTitle%, %WinText%
ControlSetText, %Control%, , %WinTitle%, %WinText%
Loop, parse, Text
{
Sleep 20
ControlSendRaw, %Control%, %A_LoopField%, %WinTitle%, %WinText%
}
ControlGetText, ControlText , %Control%, %WinTitle%, %WinText%
If (Text == ControlText)
Return
ControlSendText(Control, WinTitle, WinText, Text)
}
</code></pre></div><p>Если очистка контрола с помощью ControlSetText приведёт к сбою, нажимайте бэкспейс:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
ControlSendText(Control, WinTitle, WinText, Text)
{
ControlFocus, %Control%, %WinTitle%, %WinText% 
Loop 
{
ControlGetText, ControlText , %Control%, %WinTitle%, %WinText%
If (A := StrLen(ControlText)) = 0
break
ControlSend, %Control%, {BackSpace %A%+3}, %WinTitle%, %WinText%
}
Loop, parse, Text
{
Sleep 20 
ControlSendRaw, %Control%, %A_LoopField%, %WinTitle%, %WinText%
}
ControlGetText, ControlText , %Control%, %WinTitle%, %WinText%
If (ControlText == Text)
Return
ControlSendText(Control, WinTitle, WinText, Text) 
}
</code></pre></div></div></div><p>Кстати у себя заметил, что без использования ControlFocus ошибки при вводе гораздо реже.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 12 Feb 2013 09:18:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69386#p69386</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69378#p69378</link>
			<description><![CDATA[<p>А на практике всё индивидуально:<br />В одной программе паузы выполняются, а в другой игнорируются <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p><p>Хотя можно ввести по символам <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />&nbsp; <br /></p><div class="codebox"><pre><code>Var = красный зеленый синий

Loop, parse, Var
{
ControlSend, WindowsForms10.EDIT.app.0.2004eee8, %A_LoopField%, ahk_class WindowsForms10.Window.8.app.0.2004eee
Sleep 150
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 11 Feb 2013 22:20:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69378#p69378</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69377#p69377</link>
			<description><![CDATA[<p>Видимо лучше использовать ControlSetText, просто ControlSend без SetKeyDelay печатает символы по одному с минимальной задержкой, а ControlSetText меняет содержимое контрола сразу, программа обрабатывает по одному символу и без паузы глючит. Проверьте это с помощью Ctrl+V ради интереса.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 11 Feb 2013 22:06:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69377#p69377</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69376#p69376</link>
			<description><![CDATA[<p>Хм. А ведь есть ещё и команда <a href="http://www.script-coding.com/AutoHotkey/SetControlDelay.html">SetControlDelay</a>, а я и не знал.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 11 Feb 2013 21:59:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69376#p69376</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69375#p69375</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Однако, насколько я понимаю, на скорость посылки содержимого переменной SetKeyDelay не влияет, то есть успех маловероятен.</p></blockquote></div><p>Как раз SetKeyDelay и будет вводить каждый символ переменной с заданным интервалом.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 11 Feb 2013 21:52:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69375#p69375</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69374#p69374</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><div class="quotebox"><blockquote><p>не подходит - работает надежно</p></blockquote></div><p>не подходит тем что надёжно работает?<br /></p><div class="quotebox"><blockquote><p>программа сбоит - отказывается сохранять данные</p></blockquote></div><p>Так вы код покажите, какая связь между посылом текста в контрол, и сохранением данных.<br /></p><div class="quotebox"><blockquote><p>а при следующей загрузке прорисовывает контрол уже с текстом из прошлой сессии.</p></blockquote></div><p>Вам контрол нужен в сторонней проге, или в своём GUI AHK?<br />И чего вы хотите вообще добится?</p></blockquote></div><br /><p>Уважаемый serzh82saratov, не надо горячится. да и словесные перепалки нам ни к чему. Кода и информации в своем вопросе я привел ровно столько, сколько необходимо для описания&nbsp; данной проблемы. Ваше предложение использовать ControlSetText вместо ненадежно работающей ControlSetText имеет смысл, ибо в моей ситуации ControlSetText показала лучшие результаты. Для себя я ее использовать увы, не&nbsp; могу по причине побочных эффектов в целевом окне.</p><p>Если более детально, ситуация выглядит так:</p><p>Скрипт разрабатывается для управления диагностической программой для грузовых машин.<br />Вышеприведенный фрагмент кода посылает номер машины из переменной скрипта в соответствующее поле формы заказа на ремонт.</p><p>При тестовых прогонах скрипта выяснилось, что ControlSend работает со сбоями, описанными выше: в 11 из 71 формах номер авто был искажен. Причем применение Send вместо ControlSend&nbsp; дало похожие результаты. Еще Send в данном случае дополнительно требовал клика мыши по контролу, что нежелательно.</p><p>Применение ControlSetText само содержимое переменной в контрол посылает безошибочно, однако приводит к нештатному поведению самой диагностической программы, каким-то образом препятствуя завершению и сохранению открытого заказа, хотя визуально текст посылается куда надо. </p><p>Вот у меня и возник вопрос, есть ли возможность повысить надежность срабатывания ControlSend, ибо она мне в данной ситуации подходит лучше всего. Завтра поэкспериментирую с SetKeyDelay, в случае успеха - отпишусь. Однако, насколько я понимаю, на скорость посылки содержимого переменной SetKeyDelay не влияет, то есть успех маловероятен.</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Mon, 11 Feb 2013 21:36:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69374#p69374</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69371#p69371</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>не подходит - работает надежно</p></blockquote></div><p>не подходит тем что надёжно работает?<br /></p><div class="quotebox"><blockquote><p>программа сбоит - отказывается сохранять данные</p></blockquote></div><p>Так вы код покажите, какая связь между посылом текста в контрол, и сохранением данных.<br /></p><div class="quotebox"><blockquote><p>а при следующей загрузке прорисовывает контрол уже с текстом из прошлой сессии.</p></blockquote></div><p>Вам контрол нужен в сторонней проге, или в своём GUI AHK?<br />И чего вы хотите вообще добится?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 11 Feb 2013 19:09:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69371#p69371</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69370#p69370</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Может вам нужен ControlSetText<br /></p><div class="codebox"><pre><code>TruckID = AAA001
ControlSetText, WindowsForms10.EDIT.app.0.2004eee8, %TruckID%, , ahk_class WindowsForms10.Window.8.app.0.2004eee</code></pre></div></blockquote></div><p>Спасибо за идею. но не подходит - работает надежно, но в таком случае начинает сама целевая программа сбоит - отказывается сохранять данные, а при следующей загрузке прорисовывает контрол уже с текстом из прошлой сессии. </p><p>Придется писать скрипт для проверки содержимого целевых ячеек после посылки текста.</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Mon, 11 Feb 2013 18:48:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69370#p69370</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69306#p69306</link>
			<description><![CDATA[<p>Может вам нужен ControlSetText<br /></p><div class="codebox"><pre><code>TruckID = AAA001
ControlSetText, WindowsForms10.EDIT.app.0.2004eee8, %TruckID%, , ahk_class WindowsForms10.Window.8.app.0.2004eee</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 10 Feb 2013 10:33:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69306#p69306</guid>
		</item>
		<item>
			<title><![CDATA[AHK: как повысить надежность ControlSend]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69305#p69305</link>
			<description><![CDATA[<p>Код AHK:</p><div class="codebox"><pre><code>
TruckID = AAA001
...
ControlFocus, WindowsForms10.EDIT.app.0.2004eee8, ahk_class WindowsForms10.Window.8.app.0.2004eee
ControlSend, WindowsForms10.EDIT.app.0.2004eee8, %TruckID%, ahk_class WindowsForms10.Window.8.app.0.2004eee
</code></pre></div><p>при посылке примерно в 15-20% случаев дает сбои в виде </p><p>aaa001, <br />AAA#01, <br />aAA001 </p><p>Существует ли способ повысить надежность срабатывания команды?</p><p>Заранее благодарен</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sun, 10 Feb 2013 10:02:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69305#p69305</guid>
		</item>
	</channel>
</rss>
