<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: ввод с помощью SendKeys в определенное окно]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9395&amp;type=atom" />
	<updated>2014-03-29T09:00:44Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9395</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81296#p81296" />
			<content type="html"><![CDATA[<p>Всё-таки эмуляция нажатия клавиш - это кривоватое решение. Правильнее было бы запилить свой простенький telnet-клиент с помощью Winsock.</p>]]></content>
			<author>
				<name><![CDATA[Himmler]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25902</uri>
			</author>
			<updated>2014-03-29T09:00:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81296#p81296</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81164#p81164" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[DIMMon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28177</uri>
			</author>
			<updated>2014-03-24T09:47:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81164#p81164</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81104#p81104" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2014-03-22T06:25:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81104#p81104</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81071#p81071" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[DIMMon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28177</uri>
			</author>
			<updated>2014-03-21T11:44:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81071#p81071</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81065#p81065" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-03-21T09:02:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81065#p81065</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81062#p81062" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2014-03-21T08:23:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81062#p81062</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: ввод с помощью SendKeys в определенное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=81059#p81059" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[DIMMon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28177</uri>
			</author>
			<updated>2014-03-21T06:04:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=81059#p81059</id>
		</entry>
</feed>
