<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: ввод с помощью SendKeys в определенное окно]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9395</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9395&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: ввод с помощью SendKeys в определенное окно».]]></description>
		<lastBuildDate>Sat, 29 Mar 2014 09:00:44 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81296#p81296</link>
			<description><![CDATA[<p>Всё-таки эмуляция нажатия клавиш - это кривоватое решение. Правильнее было бы запилить свой простенький telnet-клиент с помощью Winsock.</p>]]></description>
			<author><![CDATA[null@example.com (Himmler)]]></author>
			<pubDate>Sat, 29 Mar 2014 09:00:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81296#p81296</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81164#p81164</link>
			<description><![CDATA[<div class="quotebox"><cite>dab00 пишет:</cite><blockquote><p>WScript.Echo objWMI.ExecQuery(&quot;Select * from Win32_Process Where ProcessId = &quot; &amp; intPID &amp; &quot;&quot;).Count</p></blockquote></div><p>Спасибо большое за подсказку!!!</p>]]></description>
			<author><![CDATA[null@example.com (DIMMon)]]></author>
			<pubDate>Mon, 24 Mar 2014 09:47:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81164#p81164</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81104#p81104</link>
			<description><![CDATA[<p>Мда, интересный вопрос, оказывается StdOut телнета не перенаправишь, поэтому Exec тут не играет, <a href="http://stackoverflow.com/questions/2212763/c-sharp-telnet-process-w-redirected-standard-streams-quits-immediately">ссылка</a><br />Почему бы не запускать telnet без аргументов - не <em>oShell.Run &quot;telnet.exe &quot; &amp; Host</em> , а примерно так:<br /></p><div class="codebox"><pre><code>
Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
WshShell.Run(&quot;telnet.exe&quot;)
WScript.Sleep 2000
WshShell.SendKeys &quot;o localhost {Enter}&quot;
</code></pre></div><p>Таким образом окно консоли не закроется. Другое дело, что мы не поймем подключились к хосту или нет. <br />Другой вариант - чтобы пасти закрылось окно или нет можно запустить его так:<br /></p><div class="codebox"><pre><code>
Const ProcessName = &quot;telnet.exe&quot;

Set objWMI = GetObject(&quot;winmgmts:\\.\Root\CIMV2&quot;)

ret = objWMI.Get(&quot;Win32_Process&quot;).Create(ProcessName, , , intPID)
If ret &lt;&gt; 0 Then
    MsgBox &quot;Не удалось создать процесс &quot; &amp; ProcessName
    WScript.Quit
End If

WScript.Sleep 5000

WScript.Echo objWMI.ExecQuery(&quot;Select * from Win32_Process Where ProcessId = &quot; &amp; intPID &amp; &quot;&quot;).Count

&#039; здесь закрываем окно
WScript.Sleep 5000

WScript.Echo objWMI.ExecQuery(&quot;Select * from Win32_Process Where ProcessId = &quot; &amp; intPID &amp; &quot;&quot;).Count
</code></pre></div><p>Или даже сконфигурировать параметры окна примерно так:<br /></p><div class="codebox"><pre><code>
Const ProcessName = &quot;telnet.exe&quot;
Const ProcessTitle = &quot;Telnet Session&quot;

Set objWMI = GetObject(&quot;winmgmts:\\.\Root\CIMV2&quot;)
Set objConfig = objWMI.Get(&quot;Win32_ProcessStartup&quot;).SpawnInstance_
objConfig.Title = ProcessTitle &#039;заголовок окна
objConfig.ShowWindow = 3 &#039;SW_SHOWMAXIMIZED

ret = objWMI.Get(&quot;Win32_Process&quot;).Create(ProcessName, , objConfig, intPID)
If ret &lt;&gt; 0 Then
    MsgBox &quot;Не удалось создать процесс &quot; &amp; ProcessName
    WScript.Quit
End If

WScript.Sleep 5000

WScript.Echo objWMI.ExecQuery(&quot;Select * from Win32_Process Where ProcessId = &quot; &amp; intPID &amp; &quot;&quot;).Count

&#039; здесь закрываем окно
WScript.Sleep 5000

WScript.Echo objWMI.ExecQuery(&quot;Select * from Win32_Process Where ProcessId = &quot; &amp; intPID &amp; &quot;&quot;).Count
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (dab00)]]></author>
			<pubDate>Sat, 22 Mar 2014 06:25:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81104#p81104</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81071#p81071</link>
			<description><![CDATA[<div class="quotebox"><cite>dab00 пишет:</cite><blockquote><div class="quotebox"><blockquote><p>как еще можно произвести проверку, что окно активно?</p></blockquote></div><p>WSH с окошками не работает, по-моему без костылей никак<br />p.s. Сорри, поспешил, у Вас тут не про окошки речь, обратите внимание на параметр &lt;WaitOnReturn&gt; метода <a href="http://www.script-coding.com/WSH/WshShell.html#3.4.">Run </a>объекта WshShell, а также на метод <a href="http://www.script-coding.com/WSH/WshShell.html#3.5.">Exec</a>.</p></blockquote></div><div class="codebox"><pre><code>Set WshExec = WshShell.Exec(&quot;telnet.exe &quot; &amp; Host)</code></pre></div><p>вообще не запускает telnet. А чем мне поможет Run c указанием WaitOnReturn я так и не понял</p>]]></description>
			<author><![CDATA[null@example.com (DIMMon)]]></author>
			<pubDate>Fri, 21 Mar 2014 11:44:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81071#p81071</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81065#p81065</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>но почему-то с telnet это не работает.</p></blockquote></div><p>Работает. Но «местами» <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 21 Mar 2014 09:02:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81065#p81065</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81062#p81062</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>как еще можно произвести проверку, что окно активно?</p></blockquote></div><p>WSH с окошками не работает, по-моему без костылей никак<br />p.s. Сорри, поспешил, у Вас тут не про окошки речь, обратите внимание на параметр &lt;WaitOnReturn&gt; метода <a href="http://www.script-coding.com/WSH/WshShell.html#3.4.">Run </a>объекта WshShell, а также на метод <a href="http://www.script-coding.com/WSH/WshShell.html#3.5.">Exec</a>.</p>]]></description>
			<author><![CDATA[null@example.com (dab00)]]></author>
			<pubDate>Fri, 21 Mar 2014 08:23:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81062#p81062</guid>
		</item>
		<item>
			<title><![CDATA[VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=81059#p81059</link>
			<description><![CDATA[<p>Здравствуйте!<br />Помогите решить задачу:<br />имеется скрипт, который перезагружает устройство через telnet. Он запускает telnet и с помощью SendKeys оправляет команды. Чтобы перед вводом каждой команды окно было активно сделал так:<br /></p><div class="codebox"><pre><code>
On Error Resume Next

Host = &quot;192.168.19.210&quot;
Name = &quot;г. &quot;
 
Set oShell = WScript.CreateObject(&quot;WScript.Shell&quot;)
msg = MsgBox(&quot;Перезагрузить D-Link DVG-5112S &quot; &amp; Name &amp; &quot; (&quot; &amp; Host &amp; &quot;)&quot; &amp; &quot;?&quot;,vbOKCancel,&quot;Перезагрузить&quot;)
        If msg = vbOK Then &#039;Если нажата кнопка Ок 
            
oShell.Run &quot;telnet.exe &quot; &amp; Host
WScript.Sleep 4000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;admin&quot; &amp; chr(13)
WScript.Sleep 2000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;&quot; &amp; chr(13)
WScript.Sleep 2000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;restart&quot; &amp; chr(13)
WScript.Sleep 2000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;Y&quot; &amp; chr(13)
        WScript.Quit 
        Else &#039;Если нажата кнопка отмена 
            WScript.Quit 
        End If
</code></pre></div><p> <br />Но вот незадача - иногда устройство оказывается недоступным и телнет при подключении выдает ошибку и закрывает окно и тогда Вы сами понимаете что происходит.<br />Пытался сделать так<br /></p><div class="codebox"><pre><code>On Error Resume Next

Host = &quot;192.168.19.210&quot;
Name = &quot;г. &quot;
 
Set oShell = WScript.CreateObject(&quot;WScript.Shell&quot;)
msg = MsgBox(&quot;Перезагрузить D-Link DVG-5112S &quot; &amp; Name &amp; &quot; (&quot; &amp; Host &amp; &quot;)&quot; &amp; &quot;?&quot;,vbOKCancel,&quot;Перезагрузить&quot;)
        If msg = vbOK Then &#039;Если нажата кнопка Ок 
            
oShell.Run &quot;telnet.exe &quot; &amp; Host
WScript.Sleep 4000
if oShell.AppActivate(&quot;Telnet &quot; &amp; Host) then
oShell.SendKeys &quot;admin&quot; &amp; chr(13)
WScript.Sleep 2000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;&quot; &amp; chr(13)
WScript.Sleep 2000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;restart&quot; &amp; chr(13)
WScript.Sleep 2000
oShell.AppActivate(&quot;Telnet &quot; &amp; Host)
oShell.SendKeys &quot;Y&quot; &amp; chr(13)
else
msg = MsgBox(&quot;Устройство отключено или недоступно через Telnet!!!&quot;)
end if
        WScript.Quit 
        Else &#039;Если нажата кнопка отмена 
            WScript.Quit 
        End If</code></pre></div><p>но почему-то с telnet это не работает.<br />Может кто подскажет как еще можно произвести проверку, что окно активно?</p>]]></description>
			<author><![CDATA[null@example.com (DIMMon)]]></author>
			<pubDate>Fri, 21 Mar 2014 06:04:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=81059#p81059</guid>
		</item>
	</channel>
</rss>
