<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: как повысить надежность ControlSend]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8064&amp;type=atom" />
	<updated>2013-02-12T09:18:00Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8064</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69386#p69386" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-12T09:18:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69386#p69386</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69378#p69378" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-11T22:20:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69378#p69378</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69377#p69377" />
			<content type="html"><![CDATA[<p>Видимо лучше использовать ControlSetText, просто ControlSend без SetKeyDelay печатает символы по одному с минимальной задержкой, а ControlSetText меняет содержимое контрола сразу, программа обрабатывает по одному символу и без паузы глючит. Проверьте это с помощью Ctrl+V ради интереса.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-11T22:06:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69377#p69377</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69376#p69376" />
			<content type="html"><![CDATA[<p>Хм. А ведь есть ещё и команда <a href="http://www.script-coding.com/AutoHotkey/SetControlDelay.html">SetControlDelay</a>, а я и не знал.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-11T21:59:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69376#p69376</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69375#p69375" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Однако, насколько я понимаю, на скорость посылки содержимого переменной SetKeyDelay не влияет, то есть успех маловероятен.</p></blockquote></div><p>Как раз SetKeyDelay и будет вводить каждый символ переменной с заданным интервалом.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-11T21:52:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69375#p69375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69374#p69374" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[equipment66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27128</uri>
			</author>
			<updated>2013-02-11T21:36:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69374#p69374</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69371#p69371" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-11T19:09:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69371#p69371</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69370#p69370" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[equipment66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27128</uri>
			</author>
			<updated>2013-02-11T18:48:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69370#p69370</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69306#p69306" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-02-10T10:33:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69306#p69306</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: как повысить надежность ControlSend]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69305#p69305" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[equipment66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27128</uri>
			</author>
			<updated>2013-02-10T10:02:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69305#p69305</id>
		</entry>
</feed>
